MXStudio » Flash » Galeria de Imagens com XML 2

Galeria de Imagens com XML 2

Olá Comunidade. Vamos a mais uma Coluna de Flash. Atendendo a pedidos, iremos criar uma Galeria de Imagem com miniaturas, seguindo o mesmo efeito do Tutorial Passado:

Galeria de Imagem com XML

Pré-requisitos para esse tutorial:

  • Flash MX 2004 ou Flash 8
  • Conhecimento com Interação com XML

Criando o XML

Vamos ao XML que conterá nossas as imagens maiores, as menores e seus títulos. Salve como imagens.xml.

<?xml version="1.0" encoding="utf-8"?>
<imagens>
<foto>
<imagemG>imagem.jpg</imagemG>
<imagemP>imagemp.jpg</imagemP>
<texto>Moto Ayrton Senna</texto>
</foto>
<foto>
<imagemG>imagem1.jpg</imagemG>
<imagemP>imagemp1.jpg</imagemP>
<texto>Mclaren do Senna</texto>
</foto>
<foto>
<imagemG>imagem2.jpg</imagemG>
<imagemP>imagemp2.jpg</imagemP>
<texto>Capacete Senna</texto>
</foto>
<foto>
<imagemG>imagem3.jpg</imagemG>
<imagemP>imagemp3.jpg</imagemP>
<texto>Ferrari Shumacher</texto>
</foto>
<foto>
<imagemG>imagem4.jpg</imagemG>
<imagemP>imagemp4.jpg</imagemP>
<texto>Loro</texto>
</foto>
<foto>
<imagemG>imagem5.jpg</imagemG>
<imagemP>imagemp5.jpg</imagemP>
<texto>Trator do Sítio</texto>
</foto>
<foto>
<imagemG>imagem6.jpg</imagemG>
<imagemP>imagemp6.jpg</imagemP>
<texto>Carroça antiga</texto>
</foto>
</imagens>

Criando nossa Galeria

Vamos criar nossa galeria. Crie o Layout que achar melhor. Comecei com um palco com dimenções de 550×550. A disposição das camadas será essa:

Disposição das Layers

Os nomes em vermelho são as instancias dos objetos:

Instâncias dos Objetos

holder: MovieClip em branco, posicione na camada Conteúdo
preloader: MovieClip, posicione na Camada Conteúdo
porcento: Campo de texto dinâmico, posicione na Camada Conteúdo
borda: MovieClip, posicione na Camada Conteúdo
recebe: MovieClip em branco, posicione na Camada Recebe
mascara: MovieClip, posicione na Camada Máscara
scrollBar: Componente criado, posicione na Camada ScrollBar
texto: Campo de texto dinâmico, posicione na Camada Conteúdo

Uma coisa muito importante. O MovieClip borda, precisa ter seu ponto de registro no meio. Como na imagem:

MovieClip borda

Vocês devem estar se perguntando. Que ScrollBar é esse. Esse ScrollBar foi criado por um de nossos Colunistas, Hugo Ferreira da Silva. Nós vamos seguir as mesmas regras de criação dos MovieClips. Para os que não conhecem ou não tenham criado, segue o Link do Tutorial:

ScrollBar para MovieClips e TextFields

O tutorial ele criou um ScrollBar vertical, nesse tutorial criaremos um na horizontal. Portanto, posicione os MovieClips na horizontal, sem segredos. Mesmo assim, precisamos adaptar o código para que o Scroll funcione na horizontal. Substitua os códigos dele por esse:

import mx.transitions.Tween;
import mx.transitions.easing.*;
/* Coloca no tamanho normal */
_xscale = _yscale=100;
/* Pode ser um movieclip ou um textfield */
var alvo = _parent[alvo];
/* Posição inicial do movieclip em y */
var sy:Number = alvo._x;
/* Altera o tamanho da barra */
track._width = track_width;
/* Tira a maozinha dos botões */
pan.useHandCursor = track.useHandCursor=false;
/* Mínimo em _y q o pan pode ir */
var miny:Number = Math.round(track._x);
/* Máximo em _y q o pan pode ir */
var maxy:Number = Math.round(track._x+track._width-pan._width);
/* Quando pressionar o pan */
pan.onPress = function() {
/* Inicia o arrastamento */
startDrag(this, false, miny, this._y, maxy, this._y);
};
/* Quando soltar o mouse */
pan.onRelease = pan.onReleaseOutside=function () {
/* para o arrastamento */
stopDrag();
};
/* Quando precionar o track */
track.onPress = function() {
/* Move o pan */
pan._x = _xmouse-pan._width/2;
/* Se o pan passar do valor máximo volta para o máximo */
if (pan._x>=maxy) {
pan._x = maxy;
}
/* Se o pan passar do valor mínimo volta para o mínimo */
if (pan._x<=miny) {
pan._x = miny;
}
};
/* Quando precionar o btn_esq */
bt_esq.onPress = function() {
esquerda = true;
direita = false;
};
/* Quando soltar o btn_esq */
bt_esq.onRelease = bt_esqu.onReleaseOutside=function () {
esquerda = false;
direita = false;
};
/* Quando precionar o bt_dir */
bt_dir.onPress = function() {
esquerda = false;
direita = true;
};
/* Quando soltar o btn_dir */
bt_dir.onRelease = bt_dir.onReleaseOutside=function () {
esquerda = false;
direita = false;
};
/* Cria o onEnterFrame */
this.onEnterFrame = function() {
if (esquerda) {
/* Se não estiver a ponto de ir além do que pode */
if (pan._x-1>miny) {
pan._x -= 10;
} else {
pan._x = miny;
}
}
/* Se estiver descendo */
if (direita) {
/* Se não estiver a ponto de ir além do que pode */
if (pan._x+1<maxy) {
pan._x += 10;
} else {
pan._x = maxy;
}
}
var s:Number = ((pan._x-miny)/(maxy-miny))*100;
var p:Number = (alvo._width-mascara)/100;
/* Move o objeto */
var twScrool:Tween = new Tween(alvo, "_x", Back.easeOut, alvo._x, sy-(p*s), 0.8, true);
};

Outra coisa, precisamos dizer algumas coisas ao ScrollBar criado, quem ele deve mover, o tamanho da barra e o tamanho da mascara. Deixaremos igual a essa imagem:

Parametros ScrollBar

Reparem uma coisa. Criei o scrollBar com largura de 450, então devo deixar o campo Altura da Mascara com o tamanho do ScrollBar. O campo Alvo preenchemos com o MovieClip que queremos que faça o scroll, e Altura da Barra, pode até deixar em branco que não vai influenciar em nada para nós. Falta criarmos um MovieClip que vai receber as imagens pequenas:

MovieClip recebe
MovieClip recebe

alvo: MovieClip em branco, posicione na camada alvo
barra: MovieClip, posicione na camada barra

Com nossos MovieClips e ScrollBar criados e instanciados vamos ao ActionScript. Coloquem isso no primeiro frame na camada Actions:

/* Importamos a Classe Tween */
import mx.transitions.Tween;
import mx.transitions.easing.*;
/* Variável para saber se carregou */
var carregado:Boolean = false;
/* Criamos uma variável para o MovieClipLoader para as fotos maiores */
var meuMCL:MovieClipLoader = new MovieClipLoader();
/* Outra variável para o MovieClipLoader esse é para as fotos menores */
var pequenoMCL:MovieClipLoader = new MovieClipLoader();
/* Criamos um Listener para o MovieClipLoader */
var meuListener:Object = new Object();
/* Outro Listener */
var pequenoListener:Object = new Object();
/* Criamos uma variável para o XML */
var dadosXML:XML = new XML();
/* Ignoramos os espaços em branco */
dadosXML.ignoreWhite = true;
/* Carregamos o XML */
dadosXML.load("imagens.xml");
/* Quando o XML for carregado */
dadosXML.onLoad = function(ok) {
/* Se não teve erro */
if (ok) {
/* Dizemos qual é o primeiro Nó */
xmlNode = this.firstChild;
/* Criamos uma variável para o total de itens no XML */
total = xmlNode.childNodes.length;
/* Chamamos a função montaPequeno() */
montaPequeno();
/* Chamamos a função carregaImagem chamando a primeira imagem */
carregaImagem(0, 0);
} else {
/* Exibimos uma mensagem de erro caso não carregue o XML */
mensagem.text = "Erro ao Carregar o arquivo XML";
}
};
/* Função monta pequeno */
function montaPequeno() {
/* Variável para posicionar o MovieClip */
var inicio = 0;
/* Criamos um for para cada item do XML */
for (var i = 0; i<total; i++) {
/* Chamamos o MovieClip pequeno */
var mc:MovieClip = recebe.attachMovie("pequeno", "pequeno"+i, recebe.getNextHighestDepth());
/* Pocisionamos ele */
mc._x = inicio*mc._width+inicio*10;
/* Incrementamos inicio */
inicio++;
/* Carregamos a imagem pequena */
pequenoMCL.loadClip(xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue, mc.alvo);
/* Deixamos o MovieClip barra com _yscale igual a 0 */
mc.barra._yscale = 0;
/* Pegamos a imagem */
mc.bt.imagem = i;
/* Pegamos a legenda */
mc.bt.legenda = i;
/* Ao pressionar do da Imagem Pequena */
mc.bt.onPress = function() {
/* Se a variável carregado for igual a true */
if (carregado == true) {
/* Carregamos a Imagem selecionada */
carregaImagem(this.imagem, this.legenda);
/* Carregado igual a falso */
carregado = false;
/* Apagamos o texto */
texto.text = "";
}
};
}
/* Verificamos se o ScrollBar é menor que o MovieClip recebe */
if (recebe._width<=scrollBar._width) {
scrollBar.unloadMovie();
}
}
/* Usamos o Listener para saber o progresso do Carregamento */
pequenoListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) {
/* Criamos uma variável para saber o quanto carregou */
var carregados:Number = Math.round(loadedBytes/totalBytes*100);
/* Deixamos o MovieClip barra com _yscale igual a variável carregado */
target_mc._parent.barra._yscale = carregados;
};
/* Função para carregar a Imagem grande */
function carregaImagem(arquivo, txt) {
/* Deixamos o MovieClip preloader com _xscale igual a zero */
preloader._xscale = 0;
/* Deixamos o MovieClip preloader visível */
preloader._visible = true;
/* Descarregamos qualquer conteúdo que esteja no MovieClip holder */
holder.unloadMovie();
/* Deixamos o MovieClip holder com alpha igual a zero */
holder._alpha = 0;
/* Carregamos a imagem maior selecionada */
meuMCL.loadClip(xmlNode.childNodes[arquivo].childNodes[0].firstChild.nodeValue, holder);
/* Usamos o Listener para saber o progresso do carregamento */
meuListener.onLoadProgress = function(alvo:Object, bLoad:Number, bTotal:Number) {
/* Criamos uma variável para saber quanto carregou */
var porcentagem:Number = Math.round(bLoad/bTotal*100);
/* Mostramos o quanto carregou */
porcento.text = porcentagem+"%";
/* Deixamos o MovieClip preloader com o mesmo _xscale do carregameto */
preloader._xscale = porcentagem;
};
/* Quando terminar de carregar */
meuListener.onLoadInit = function() {
/* Para usar a Classe Tween temos que criar variáveis */
/* Aqui iremos aumentar o MovieClip borda para o mesmo tamanho do MovieClip holder mais 16
para poder fazer uma borda */
var tww:Tween = new Tween(borda, "_width", Back.easeOut, borda._width, holder._width+16, 1, true);
/* Aqui iremos aumentar o MovieClip borda para o mesmo tamanho do MovieClip holder mais 16
para poder fazer uma borda */
var twh:Tween = new Tween(borda, "_height", Back.easeOut, borda._height, holder._height+16, 1, true);
/* Aqui movemos o MovieClip holder */
var twhx:Tween = new Tween(holder, "_x", Back.easeOut, holder._x, borda._x-holder._width/2, 1, true);
/* Aqui movemos o MovieClip holder */
var twhx:Tween = new Tween(holder, "_y", Back.easeOut, holder._y, borda._y-holder._height/2, 1, true);
/* Movemos o MovieClip mascara */
var twma:Tween = new Tween(mascara, "_y", Back.easeOut, mascara._y, (borda._y+holder._height/2)+16, 1, true);
/* Movemos o MovieClip recebe */
var twr:Tween = new Tween(recebe, "_y", Back.easeOut, recebe._y, (borda._y+holder._height/2)+16, 1, true);
/* Movemos o ScrollBar */
var twsP:Tween = new Tween(scrollBar, "_y", Back.easeOut, scrollBar._y, (borda._y+holder._height/2)+recebe._height+22, 1, true);
/* Movemos o campo de texto */
var twtxt:Tween = new Tween(texto, "_y", Back.easeOut, texto._y, (borda._y+holder._height/2)+recebe._height+47, 1, true);
/* Mostramos o texto */
texto.text = xmlNode.childNodes[txt].childNodes[2].firstChild.nodeValue;
/* Quando a variavel twhx acabar de se mover */
twhx.onMotionFinished = function() {
/* Deixamos o MovieClip preloader invisivel */
preloader._visible = false;
/* Apagamos o texto do campo de texto porcento */
porcento.text = "";
/* Aqui deixamos o MovieClip holder ficar com alpha igual a 100 */
var twha:Tween = new Tween(holder, "_alpha", Regular.easeOut, 0, 100, 0.6, true);
/* Quando a variavel twha acabar */
twha.onMotionFinished = function() {
/* Deixamos a variável carregado igual a true */
carregado = true;
};
};
};
}
/* Adicionamos um Listener ao MovieClipLoader */
meuMCL.addListener(meuListener);
/* Adicionamos um Listener ao MovieClipLoader */
pequenoMCL.addListener(pequenoListener);

Aqui um exemplo da Galeria funcionando

Considerações Finais

Hoje aprendemos como criar uma galeria de imagem mostrando miniaturas, tudo vindo de um XML. Mais uma vez utilizamos a Classe Tween para criar efeitos de forma rápida e mais bonitas.

Gostaria de aproveitar a oportunidade e convidar todos os leitores a visitarem meu Portfolio Online, lá você poderão encontrar todos os meus trabalhos e tutoriais desenvolvidos: http://www.natanalves.com

Um abraço a todos e até a próxima.

Autor: Natan D. Alves – Moderador do Fórum de Flash & ActionSctipt MXSTUDIO

Qualquer dúvida envie um e-mail para natanalves@mxstudio.com.br ou acesse nosso fórum


Assine o nosso Feed
1.404 assinantes,
assine você também!
Publique esse artigo no Twitter Salve este artigo no Delicious Cadastre esse artigo no Dihitt Cadastre esse artigo no UEBA Cadastre esse artigo no Rec6

13 Comments to Galeria de Imagens com XML 2

  1. carl's Gravatar carl
    Julho 15, 2008 at 9:37 am | Permalink

    Excelente tutorial, parabens!!!!
    Só que como eu sou novato no flash e no actionscripts tive alguns problemas.
    as miniaturas foram carregadas mas não funcionaram como botões para poder carregar as maiores.
    Será que me podes ajudar, agradeço desde já.

  2. Zappod's Gravatar Zappod
    Julho 16, 2008 at 2:27 pm | Permalink

    Está ótimo para quem já mexe com o flash, mas para novatos fica meio ‘embassado’ criar o que você pede, se puder entrar em mais detalhes nas explicações de como criar, onde criar…. ou se puder disponibilizar o fla tb…. vlw abraços e parabéns

  3. stephs's Gravatar stephs
    Julho 23, 2008 at 11:44 am | Permalink

    Troque “mc.bt” por “mc” apenas

  4. Julho 30, 2008 at 2:48 pm | Permalink

    Nessa galeria posso carregar swf em vez de jpg, apenas mudando o xml?

  5. Jone's Gravatar Jone
    Outubro 24, 2008 at 8:44 am | Permalink

    Alguem pode dizer se existe alguma galeria dinâmica que aceite ficheiros PNG com transparência?

    Obrigado e Parabéns pelo tutor.

  6. Fernando's Gravatar Fernando
    Novembro 28, 2008 at 10:37 am | Permalink

    Cara muito bom trabalho mesmo, mas sou iniciante, estou buscando aprender flash, faz tempo q eu estava atras de algo assim, mas nunca havia encontrado.
    Meus parabéns! obrigado pela ajuda.

  7. Recieri's Gravatar Recieri
    Janeiro 21, 2009 at 2:08 pm | Permalink

    Eai cara, muito bom esse album, parabens! mas aí, por exemplo, tem como eu automatizar na hora de colar as fotos no album, por exemplo: eu tenho 300 fotos e quero colocar elas em um album como esse, eu tenho que ficar fazendo o codigo pra cada uma das fotos, ou tem como eu colocar essas 300 fotos de um modo automatico?
    e parabens pelo trabalho mas uma vez aí!

  8. ERY's Gravatar ERY
    Fevereiro 9, 2009 at 11:20 pm | Permalink

    Não consegui!
    Alguém pode fornecer o FLA?
    Grato pela atenção.

  9. Fevereiro 13, 2009 at 9:30 pm | Permalink

    meu camarada, sei alguma coisa em flash, mais não saco legal de xml, tentei fazer isso umas 3x e não deu certo, nem o scroll nem a galeria, será que não teria uma video aula, em cd até que eu pudesse conseguir pra que a explicação fosse mais detalhada?

  10. Dezembro 16, 2009 at 2:21 am | Permalink

    também não consegui fazer. Se tiver aula em video no youtube, mandae fazendo o favor.

    O scroll tbm não consegui fazer :/

  11. Dezembro 16, 2009 at 2:22 am | Permalink

    também tentei fazer e não consegui. Se tiver aula em video, mandae fazendo o favor.

    O scroll também não consegui fazer

  12. Maria's Gravatar Maria
    Janeiro 18, 2010 at 4:20 pm | Permalink

    Eu tentei recriar o tutorial mas não consegui…Talves seja por ainda ser uma iniciante em flash..
    Agradecia que me fornecessem o fla. ou um link de um tutorial em video…
    Por favor, ajudem-me..

  13. Paulo's Gravatar Paulo
    Maio 21, 2010 at 2:05 pm | Permalink

    galera da uma olhada nessa galeria:

    http://www.isimples.net/is10

    ela é uma galeria em flash com a possibilidade de criar álbuns

    vale a pena conferir!!!

Deixe um Comentario

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Natan D. Alves

Fã e divulgador da plataforma Flash e do ActionScript, músico nas horas vagas e estudante do curso de Ciência da Computação.

Últimos Artigos do Autor