Quarta-feira, 17 de novembro de 2004 às 12h25

Galeria de imagens com XML

Vou mostrar, nesta matéria, como criar um sistema de galeria de imagens no Flash acessando dados vindos de um XML.

Primeiro passo: Crie um MovieClip, e colocando o seu registration no canto esquerdo superior, dê o nome a ele de "item_mc" (sem aspas!) e marque a opção export for ActionScript, como mostra a imagem abaixo.

Dentro do MovieClip "item_mc"(sem aspas!), insira um MovieClip vazio e dê um instance name para ele de "foto" (sem aspas!). Você pode também desenhar um quadrado, como mostra a figura abaixo, e mascarar o MovieClip "foto". Fique tranquilo, se por acaso a foto pequena for de tamanho diferente, a máscara não estraga a formatação das posições das fotos.

Coloque um MovieClip vazio, e dê a ele o instance name de "container" (sem aspas!). Esse MovieClip irá receber todos os MovieClips das fotos dentro dele. Observe na imagem abaixo:

Vamos colocar outro MovieClip vazio com o instance name de "fotog"(sem aspas!), que também está mascarado para evitar que a foto prejudique o layout da sua aplicação. Como mostra a imagem abaixo:

Agora, com todos os objetos criados, vamos começar a programar... :D

O arquivo XML, você pode baixar clicando aqui.

Importe a classe tween para animar os movieclips que irão carregar as fotos. Caso você tenha interesse em olhar o código da classe, ela encontra-se no diretório (mx\effects\Tween)

import mx.effects.Tween;

Definindo as variáveis:

i = Use como índice para percorrer o XML: seu valor inicial é 0
len = Irá receber o valor total de nós, daremos um valor inicial de 0 também, pois ainda não sabemos quantos nós temos no XML
coluna = Equivale a cada coluna onde o MovieClip vai se posicionar, valor inicial também 0
linha = Equivale ao valor do numero das linhas, valor inicial também 0

var i:Number = 0, coluna:Number = 0, linha:Number = 0,len:Number = 0;

Vamos usar o Array de dados para acessar o conteúdo existente no XML, de forma mais prática e rápida.

var dados:Array;

Crie um objeto da classe MovieClipLoader para carregar as fotos existentes no XML;

var carregar:MovieClipLoader = new MovieClipLoader();

Defina a variável "fotos", que vai receber um objeto da classe XML.

var fotos:XML = new XML();

A propriedade ignoreWhite ignora os espaços em branco contidos no XML.

fotos.ignoreWhite = true;

O método load recebe como argumento a URL do arquivo XML que será carregada.

fotos.load("fotos.xml");

Evento onLoad da classe XML é executado quando os dados são carregados, ou seja, a partir desse momento podemos usar o conteúdo existente no XML.

fotos.onLoad = function():Void{

Atribuindo o valor inicial de 0 para as variáveis "i", "coluna", "linha"

i = coluna = linha = 0;

Atribua agora a variável len, a quantidade de nós do XML, usando a propriedade length

len = this.firstChild.childNodes.length;

Atribuindo agora um valor à variavel "dados" do XML;

dados = this.firstChild.childNodes;

Execute a função preencher, passando como argumento as variáveis "coluna" e "linha";

preencher(coluna,linha);}

function preencher(coluna:Number,linha:Number):Void{

Defina uma variável chamada "mc", e vamos usar o método attachMovie, do MovieClip "container", que vai receber três argumentos.

01. "item_mc", que foi definido no linkage do movieclip item_mc;
02. depois informamos qual será o novo nome do movieclip;
03. e, por fim, o nível em que ele irá ficar.

Para isso, usaremos o método getNextHighestDepth, que vai retornar o nível imediatamente mais alto.

var mc:MovieClip = container.attachMovie("item_mc","i["+coluna+"]["+linha+"]",container.getNextHighestDepth());

Atribua à propriedade _x o cálculo para posicionar o MovieClip na posição x - correta de acordo com a coluna em que se encontra, e usando o método estático round da classe Math, para arredondar esse valor:

mc._x = Math.round(coluna * mc._width + coluna);

Atribua à propriedade _y o cálculo para posicionar o MovieClip na posição _y - correta de acordo com a linha em que se encontra, e usando o método estatico round da classe Math, para arredondar esse valor:

mc._y = Math.round(linha * mc._height + linha);

Atribua o valor 0 para as propriedades _xscale e _yscale;

mc._xscale = mc._yscale = 0;

Crie a variável "url_fotop", que vai receber do XML o endereço da foto que deve ser carregada. Usando a variável "dados" que é do tipo array, e acessando o do XML correto a partir da variável "i", use a propriedade attributes da classe XML, e o nome do atributo definido no XML - que no caso é "fp" (sem aspas):

mc.url_fotop = dados[i].attributes.fp;

A variável "url_fotog" é semelhante à "url_fotop", só que irá receber o atributo "fg" (sem aspas), que é a url da foto grande:

mc.url_fotog = dados[i].attributes.fg;

Defina o evento onRelease, para que quando o MovieClip seja clicado, ele execute a função carregarFoto, e passe os argumentos da função

mc.onRelease = function():Void{

Executar a função carregar e passar os argumentos url e target.

carregarFoto(this.url_fotog,fotog);
}

Defina o evento onTweenUpdate da classe Tween no "mc" (sem aspas). Esse evento receberá como argumento um valor a cada interpolação da tweenclass, que será atribuído às propriedades _xscale e _yscale.

mc.onTweenUpdate = function(p):Void{
this._xscale = this._yscale = p
}

Executando a função animate e passando como argumento o movieclip que foi attachado.

animate(mc);
}

Agora crie a função carregarFoto, passando como argumento a URL da foto e o TARGET, que é o movieclip onde será carregada a foto.

function carregarFoto(url:String,target:MovieClip):Void{

Use o método loadClip da classe MovieClipLoader, que irá receber os argumentos passados na função:

url (que é o tipo String) e target (que é do tipo MovieClip)

carregar.loadClip(url,target);
};

Defina a função animate, que vai receber como argumento o MovieClip que será animado, usando a TweenClass.

function animate(mc:MovieClip):Void{

Crie um objeto da classe Tween para cada MovieClip, passando os seguintes argumentos:

mc -> nome do objeto usado pela tween (o próprio MovieClip que foi attachado anteriormente)
0 -> valor inicial
100 -> valor final
400 -> tempo em milisegundos

mc.tween = new Tween(mc,0,100,400);

Evento onTweenEnd é executado quando ocorrem todas as interpolações na animação.

mc.onTweenEnd = function():Void{

Execute a função carregarFoto, passando o valor da variável "url_fotop" e MovieClip "foto". Sendo eles os argumentos, necessários para a função.

carregarFoto(this.url_fotop,this.foto);

Incremente as variáveis "i" e "coluna".

i++,coluna++;

Use a condicional if para verificar se a variável "coluna" é maior que 2. Caso seja, zere a mesma e incremente a variável "linha", para ir para a linha seguinte;

if(coluna > 2){
coluna=0;
linha++;
};


E outra condicional para verificar se a variável "i" é maior que a variável "len", e executar a função preencher, passando os valores das variáveis "coluna" e "linha".

if(i < len){
preencher(coluna,linha);
};
};
};

Espero que tenham gostado. Abraço a todos!

40 comentários

 Antonio Andrade
17/11/2004 13h52

Artigo Excelente !!

Isso que eu estava procurando a tempo para terminar um projeto, agora sei como vou fazer. vlw Max.Continue assim..parabenshehe

 Nilmara Nobre Colvara
17/11/2004 15h45

Muito ph*da

Muito maneira a coluna cara!! Explicadão!! Escreva mais!! Valeeeeu!!

 Rogério Louzada
17/11/2004 23h06

Valeu Max

Gostei muito da matéria e fiz uns exemplos por aqui no tempo livre que tive. Parabéns e obrigado por dedicar seu tempo à transmissão do conhecimento.

 Vanessa
18/11/2004 00h55

Congrats

Show de bola Max. Tais muito bem memso. Parabens pelos comentarios e pela didática

 João Carlos Santana
18/11/2004 04h24

faltou somente o codigo fonte

gostaria que fosse possivel baixar o codigo fonte... desde ja meu muito obrigado..

 Geovane Almeida
18/11/2004 09h57

Muito bom

Cara, muito bom... realmente, só faltou o código inteiro... mas mesmo assim, parabéns!

 Erick
19/11/2004 16h27

Excelente

Excelente Maxwel, sua explicação tirou uma duvida minha que nem no curso eu consegui entender, Espero que logo adiante você possa dar uma explicação como essa sobre webservices. Suas explicações são show.

 Jaci
26/11/2004 00h19

Problemas com as imagens

Olá, muito legal o tutorial, mas eu fiz ele como estava no tutorial e testei, criei uns quadros ao redor das imagens, eles aparecem, menos as imagens. O que será que fiz de errado.

 adriano ferreira
08/12/2004 19h03

Pedido

Muito boa essa materia apesar de eu não ser fera em flash(estou comecando agora), mas eu infelizmente não consegui monta minha galeraia, GOSTARIA SE FOR POSSIVEL DE VC MANDA PARA MIM O ARQUIVO PRONTO, PARA VER AONDE EU ERREI! :) obrigado pela atencao! Adriano_bh

 Neiff Carlos Pereira
14/12/2004 03h48

pagina

ola, gostaria saber se este exemplo deixa a home page pesada?

 Sérgio
15/12/2004 11h07

Sensacional

Esta materia era o que faltava pra eu fazer meu site com fotos de skate. muito bem bolado.
Maxwell Dayvson, achei legal esse seu hobby, jogar KOF. Que pena que eu sou de SP e vc de RJ senão nós torariamos um contra.

 efrem
17/12/2004 20h04

pedido

poderia mandar o arq fla pra ver onde errei?

 Edson Porto
04/01/2005 19h00

texto

primeiramente, parabéns pela matéria!....mto boa mesmo!...mas uma dúvida....como posso adicionar textos às imagens? cada imagem com um texto diferente vindo do xml.
Aguardo resposta, Obrigado!

 Josué
07/01/2005 23h34

Pedido

Não conheco nada de flash a minha primeira tentativa d mexer nele esta sendo nesse tutorial, por favor vc poderia me mandar o arquivo .fla p/ poder intender, pois estou muito interassado nessa galeria. Por Favor

 Panayotis Esquivel Procopiou
08/01/2005 01h40

Download do Arquivo

Pessoal para quem tá pedindo o download da matéria pode achar aqui na continuação dela.
http://www.imasters.com.br/artigo.php?cn=2778&cc=177
abraços a todos

 Carlos Valente
11/01/2005 10h27

Critica Construtiva

Ola Maxwell Dayvson,

Gostaria de fazer uma critica construtivel sobre o seu artigo. Para quem já conhece bem o Flash, esse tutorial está perfeito, mas para quem está começando a aprender (meu caso) ele está meio confuso e acabei desistindo (por não conseguir entender sua lógica) na parte da criação do MC instance name foto.

Será que você não poderia ser mais detalhista na criação desse artigo ?? Fiquei super enpolgado com ele, mas acabei desistindo por acha-lo confuso (infelizmente).

Em compensação, a explicação do Action Script utilizado está perfeita !!!

Espero que não fique chateado comigo pelo comentário, mas a minha frustração foi muito grande, pois queria muito fazer um do zero, através do seu tutorial, e não consegui. :-(

Um grande abraço

 Valter Ferreira Martins
13/01/2005 01h57

Critica Construtiva parte II

Ola Maxwell, como noso amigo Carlos Valente comentou pra quem esta começando a aprender(meu caso tb) me perco exatamente na hora de inserir um Movie clip vazio dentro do foto mc!Ou seja no começo, sera que vc poderia ser mais detalhista, tenho certesa de que pra quem ja mexe com flash deve estar muito facil, mais como percebeu sou leigo neste assunto!
Mas mesmo assim parabens pelo album de foto dinamico ficou muito bom, pradizera verdade ficou otimo gostaria de te-lo em meu site.

 Panayotis Esquivel Procopiou
13/01/2005 02h05

Re: Critica Construtiva.

Bom pessoal, tentei ser o mais detalhista possivel, até para não ficar muito cansativa a matéria, entendo que alguns ainda iniciando no flash tenham, dificuldades mais essa matéria é de nivel intermediario a avançado. Onde me prendo a uma explicação mais clara da lógica usada e dos códigos. Irei prepara umas matérias para iniciantes,não terem mais problemas com o flash e sua interface.
Abraços a todos e peço desculpas por eventuais erros.

 Fabio
04/02/2005 11h42

Sugestão construtiva

Maxwell Dayvson entendo que este artigo seja nível intermediário/avançado mas você não poderia dispor junto com eles o arquivo de autoria para que dúvidas possíveis possam ser sanadas com maior facilidade. Um abraço! :)

 Hudson
10/02/2005 01h33

Desculpe mas não entendo.

Oi Maxwell, me desculpe mas as matérias sobre flash são bem complexas, nunca mexi em fotoshop e consigo acompanhar perfeitamente pelo site mas estou tendo problemas quanto as matérias de flash, gostaria se possivel que as matérias fossem mais detalhadas pois tenho pouco conhecimento nessa ferramenta.
Desde ja agradeço.

 Ivan Silva
26/02/2005 01h19

POde incrementar?

Gostaria de saber se daria pra incrementar com mais algumas funções, tipo, carregar a primeira imagem sem necessidade de clique.
Consegui colocar um preloader pra a imagem a ser carregada.
Obrigado

 Henirque Londero
18/03/2005 11h15

Não consigo acompanhar....

Olá Maxwell, sou apaixonado por flash mas não conheço nada sobre codigo nele ainda, de modo que não consigo acompanhar a materia. Estou a 2 semanas tentando fazer a galeria de imagens e nada! poderia me mandar os fontes ou pelo menos um modelo da estrutura pra mim? obrigado.

 Henirque Londero
18/03/2005 12h05

ok, tudo certo

ok, vi agora onde vc disponibilizou as fontes, desconsidere o comentario anterior.

 Henirque Londero
30/03/2005 08h46

Fontes da Galeria de Imagens

Nos ultimas semanas várias pessoas me mandaram email pedindo onde estavam as fontes desse artigo. Bom, em seu próximo artigo o autor incrementou o projeto e disponibilizou as fontes.
Artigo: Paginação


 Marcelo Vieira
11/04/2005 14h46

Tbm não consigo acompanhar

Olá Maxwell
Começei a mexer no flash faz pouco tempo e tentei fazer a galeria mais não consigo acompanha a estruta de layers e etc... Por favor será que não podia me mandar o fla para que eu possa estudar.

 Haroldo Ribeiro
22/06/2005 15h27

Varias fotos

Eu gostaria de criar uma galeria fotografica com varias fotografias, mas com thumbnails, como este manual,mas tive a ler o xml e teria de adicionar manualmente 300 fotos em cada album que fizer! como facil isto de maneira simples e rapida?

 michele
03/07/2005 14h44

Galeria de imagens

olá, eu gostaria de criar uma galeria legal assim mas com muitas ftos!!! mas sou inciante e não consigo acompanhar , não dava pra vc fazer um artigo, que anteceda esse? como uma passo a passo até chegar ai, ???valeu

 Luiz Henrique Teixeira de Lima
01/08/2005 23h01

TB não consegui

Sou iniciante em flash
colega a ideia da galeria foi show
Porem como vc mesmo pode ver ta um tanto dificil de montar ...
Vc poderia colocar em uma linguagem mais simples, mais clara para que nos possamos montar ..
Abraço !!

 ederson
16/08/2005 18h29

perfeito

meu brother parabens, eh simplesmente maravilhoso seu script, se alg quizer ver funcionando acesse www.loslocos.com.br, agora maxwell, gostaria de ver contigo se tem alguma forma de eu colocar tipo um botao pra pessoa que acessa meu site salvar a foto em seu computador... obrigado.

se alguem sabe como fazer por favor entre em contato comigo... ederson@loslocos.com.br
abraços galera

 janduy malta
05/09/2005 09h37

Onde coloco os códigos

Ola amigo! Sou iniciante em flash e estou com uma dúvida mortal..."onde é colocado todos os códigos depois de criados todos os objetos?"

 Rodrigo
18/09/2005 04h28

Duvida

Nossa isso é muito legal + sou iniciante, 1º quando eu abro o flash onde eu crio um MovieClip, ia ficar + claro para todo mundo nos minimos detalhe, pois o detalhe faiz a diferencia. obrigado

 Mauricio Cunha
10/10/2005 16h00

Confuso

Amigo,
Muito bacana seu script, porem está muito confuso...Sou usuario avançado, mas mesmo assim demorou pra alguma coisa acotecer. E outra, no movie "container" e chamado o "item_mc" porem as fotos saem todas muito grande para o campo de cada mc "foto" que vc pede para criar dentro de "item_mc" até mais...

 Elyandro
06/11/2005 02h31

muito confuso

vc naum explica o porquê de tantos mc vazios, nem suas funções, nem onde colocá-los - no stage principal? tb naum indica onde colocar as actions nem explica o código. pelo menos peço que disponibilize o fla para download e estudo.

 paulo garcia
11/11/2005 17h34

tutorial interessante

Viva, eu andava à procura de um tutorial deste genero, mas para php+mysql, acho que este é excelente, muitos parabens.
Agora só preciso de adaptar de xml para php

 Eduardo Berto
23/01/2006 16h53

Source

Posta o Source ai kra! achei mto complicado esse tuto seu, mais mto útil!

Abraços

 Paulo Selke
22/02/2006 12h08

Percepção

Olha eu acho muito interessante este desenvolvimento da linguagem, mas acho que falta um pouco de didática para quem está ensinando...não se pode pressupor que quem procura este tipo de aprendizado já seja um expert em flash e programacão e realmente a explicação tem muitas falhas e não existe o arquivo para se tentar entender o que esta sendo ensinado, mas mesmo assim, valeu!
Provérbio: de boas intensões o inferno está cheio...

 Vanderlei Francisco dos Passos
30/03/2006 19h55

Fotos com arquivos XML

Eu criei como voce descreveu a rotina "Galeria de fotos XML", deu tudo certo, mas tem pessoas que estão me ligando informando que não aparece todas as fotos, não sei o que pode ser que fiz de errado, se voce quiser ver acesse o site www.magiaeseducao.com,

no momento obrigado por tudo.

 Frederico Mottinha de Figueiredo
25/04/2006 19h16

Dúvida Cruel

Algo que me deixou curioso é o sistema de Galeria deste site: http://www.avivamentomundial.com/fotos.htm
é muito legal, será que você teria uma idéia de como se faz um desses?

 Erivan Silva
13/06/2006 09h03

Duvidas

Olá a todos e principalmente Dayvson!
galera eu to com um pequeno problema! consegui criar o álbum de fotos perfeitamente! porem agora eu preciso criar um botão para salvar as imagens!
só que essa imagens aparecem dentro de uma mascara ai fica bem mais complicado!
se alguem tiver alguma ideia ou sugestão o proprio Dayvson por favor me ajude, meu email é eas_erivan_18@hotmail.com
agradesso a todos vcs desde já

 Julian Silva
03/05/2007 15h34

Transição

Gostaria de saber em que parte do script a foto do meio altera. No caso eu quero inserir um efeito de transição. Alguem sabe?

Cancelar resposta

Qual a sua opinião?

Faça login abaixo ou cadastre-se rapidamente.


2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.