Galeria de Imagem com XML

Publicado por Natan D. Alves em 24/09/2006

Olá Comunidade. Dessa vez iremos aprender a criar uma Galeria de Imagem usando XML. Não é uma galeria comum, usaremos a Classe Tween para fazer um efeito bem intereçante.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 Imagens e seus títulos. Salve como imagens.xml.

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

Criando nossa Galeria

Vamos criar nossa galeria. Você poderá fazer da maneira que desejar. Comecei com um palco com dimenções de 550×420. Os nome em Vermelho são os nomes de instância de cada MovieClip.

Instâncias dos Objetos

Uma coisa muito importante. O MovieClip borda tem que ter seu ponto de registro no meio. Como na Imagem:

MovieClip borda

Com nossos MovieClips criados e instanciados vamos ao ActionScript. Coloquem isso no frame:

/* Importamos a Classe Tween */
import mx.transitions.Tween;
import mx.transitions.easing.*;
/* Criamos uma variável para a foto atual */
var fotoAtual:Number = 0;
/* Dizemos que o MovieClip preloader tem o _xscale igual a 0 */
preloader._xscale = 0;
/* Criamos uma variável para o MovieClipLoader */
var meuMVC:MovieClipLoader = new MovieClipLoader();
/* Criamos um Listener para o MovieClipLoader */
var meuListener: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() {
   /* Dizemos qual é o primeiro Nó */
   xmlNode = this.firstChild;
   /* Criamos uma variável para o total */
   total = xmlNode.childNodes.length;
   /* Chamamos a função mostraImagem chamando a primeira imagem */
   mostraImagem(0);
};
/* Função responsável por Carregar as Imagens do XML */
function mostraImagem(imagem) {
   /* Descarregamos qualquer conteúdo que esteja no MovieClip holder */
   holder.unloadMovie();
   /* Deixamos o MovieClip preloader com _xscale igual a 0 */
   preloader._xscale = 0;
   /* Mostramos o MovieClip preloader */
   preloader._visible = true;
   /* Deixamos o MovieClip holder com _alpha igual a 0 */
   holder._alpha = 0;
   /* Desabilitamos o botão ant */
   ant.enabled = false;
   /* Desabilitamos o botão prox */
   prox.enabled = false;
   /* Apagamos o texto */
   texto.text = "";
   /* Carregamos a imagem */
   meuMVC.loadClip(xmlNode.childNodes[imagem].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);
      /* Aqui movemos o MovieClip ant */
      var twant:Tween = new Tween(ant, "_y", Back.easeOut, ant._y, (borda._y+holder._height/2)+8, 1, true);
      /* Aqui movemos o MovieClip prox */
      var twpro:Tween = new Tween(prox, "_y", Back.easeOut, prox._y, (borda._y+holder._height/2)+8, 1, true);
      /* Aqui movemos o campo de texto */
      var twtxt:Tween = new Tween(texto, "_y", Back.easeOut, texto._y, (borda._y+holder._height/2)+8+ant._height, 1, true);
      /* Mostramos o texto */
      texto.text = xmlNode.childNodes[imagem].childNodes[1].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, 1, true);
         /* Quando a variavel twha acabar */
         twha.onMotionFinished = function() {
            /* Habilitamos o MovieClip ant */
            ant.enabled = true;
            /* Habilitamos o MovieClip prox */
            prox.enabled = true;
         };
      };
   };
}
/* Ao precionar do botão prox */
prox.onPress = function() {
   /* Se a variável fotoAtual for menor que o total de fotos */
   if (fotoAtual<(total-1)) {
      /* Incrementamos a variavel fotoAtual */
      fotoAtual++;
      /* Chamamos a função mostraImagem passando o parametro fotoAtual */
      mostraImagem(fotoAtual);
   }
};
/* Ao precionar do botão ant */
ant.onPress = function() {
   /* Se a variável fotoAtual for maior que 0 */
   if (fotoAtual>0) {
      /* Decrementamos a variável fotoAtual */
      fotoAtual--;
      /* Chamamos a função mostraImagem passando o parametro fotoAtual */
      mostraImagem(fotoAtual);
   }
};
/* Adicionamos um Listener ao MovieClipLoader */
meuMVC.addListener(meuListener);

Aqui um Exemplo da Galeria funcionando.

Considerações Finais

Aprendemos hoje a criar uma Galeria de Imagem usando XML. O mais legal dessa Galeria são as animações quando se carrega uma imagem. Uma boa é estudar a Classe Tween, com ela podemos fazer vários efeitos legais.

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.237 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

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.

17 usuário comentou em " Galeria de Imagem com XML "

Assine o Feed de Comtentários ou URL de Trackback

M1974 disse,
Enviado em 21-04-2008 às 1:49 am

Natan, achei o máximo o teu tutorial e o resultado postado dessa galeria em flash, mas no meu não funcionou. Deu uns errinhos no código, mas arrumei aqui. Só que as fotos não carregam. Será que você poderia enviar o arquivo fla pra mim dar uma olhada onde errei?

Daniel disse,
Enviado em 16-05-2008 às 4:41 pm

Muito interessante a galeria! Pelo que entendo consegui fazer igualzinho mas não funcinou tmb…
Gostaria de conseguir fazer funcionar.
Abraço.

augusto disse,
Enviado em 19-05-2008 às 12:35 pm

NÃO FUNCIONA!!!!!

Natan D. Alves disse,
Enviado em 24-05-2008 às 7:43 pm

Augusto, meu E-mail está no final do site, você pode me enviar suas dúvidas que eu te ajudo a soluciona-las.

rafael disse,
Enviado em 20-07-2008 às 5:25 pm

galera eu to comecando agora a mexer com o flash e ja encontrei o problema desse tuto, na verdade ele esta funcionando perfeitamente o unico problema está na configuração do XML que as tags tem que ser fechadas corretamente, quem trabalha com sites sabe de cara que ta errado:
<image<
o certo seria:

sendo assim o codigo do flash nao encontra nenhuma imagem pra carregar, eu fiz aqui e foi belezinha ^^ parabens gostei muito do seu tuto vlws natan

Natan D. Alves disse,
Enviado em 20-07-2008 às 7:32 pm

Olá Rafael.

Realmente, o tutorial tinha esse problema, isso aconteceu desde a mudança do portal do MXStudio. Tentei diversas vezes arrumar mas o problema sempre continuava, por milagre consegui arrumar, e agora tudo está certinho.

[]s

Dan disse,
Enviado em 22-12-2008 às 7:05 pm

não funciona ele simplesmente n carrega nada e da erro em todo código na hora de testar

Deh disse,
Enviado em 10-02-2009 às 2:24 pm

ja descobri oque da erro, sao as ” “, usadas ai no exemplo. aqui eu re coloquei tudo e deu certo ;D

vale disse,
Enviado em 13-06-2009 às 8:21 pm

Hola,

Es excelente el post. Pero me podrían ayudar, no funciona la galería. Estoy usando flash mx 2004.
gracias.

Salu2

Rodrigues disse,
Enviado em 10-07-2009 às 11:29 am

Olá! Muio bom o resultado. Parabéns!
Mas no meu não funcionou infelizmente.

Criei todos os MovieClips com seus respectivos nomes na instância. E copiei e colei o código. E nada apareceu além dos MovieClips.

Será que esqueci de alguma coisa?

Sou leigo, estou começando agora.
Desde já, agradeço!

clecio disse,
Enviado em 23-07-2009 às 1:45 pm

PERFEITO , FUNCIONOU DIREITINHO CARREGOU AS FOTOS O PROBLEMA É QUE OS BOTÕES PROX E ANT NÃO EXERCEM AS SUAS DEVIDAS FUNÇÕES OU SEJAM NÃO FUNCIONAM PODE ME AJUDAR COM ISSO ? OBRIGADO.

Rodrigues disse,
Enviado em 23-07-2009 às 2:00 pm

É, eu esqueci sim de alguma coisa.
De verificar os nomes na instância.

Hauhauhau!

Valeu ;)

clecio disse,
Enviado em 23-07-2009 às 2:07 pm

OI , FAZEM DEZ MINUTOS QUE POSTEI O ULTIMO COMENTARIO E ACHEI O PROBLEMA , ESTA TUDO FUNCIONANDO PERFEITAMENTE , APENAS APAGUEI A TAG QUE DESABILITA OS BOTÕES E DEU TUDO CERTO , PARABÉNS PELO POST E MUITO OBRIGADO , VALEU .

Eddy disse,
Enviado em 16-09-2009 às 1:58 pm

MEUS AMIGO NAO FUNCIONA DE JEITO NENHUM! ME SALVEM!!

edu disse,
Enviado em 25-09-2009 às 8:10 pm

ola, estou atrás de um script similar ao que vc passou aí em cima, porem que as fotos passes sozinhas para frente, gostaria de utilizar em fotos em destaque na pagina inicial…

abraços

BACO disse,
Enviado em 07-12-2009 às 1:09 pm

NO MEU FUNCIONOU QUASE TUDO MENOS AS LEGENDAS E A PORCENTAGEMM AJUDAAAA PLEASE:D

Higor disse,
Enviado em 30-12-2009 às 1:16 am

Perfeito cara Valeeeuu!! Show seus tutoriais!!!

Deixe o seu comentário abaixo...

 Username (*required)

 Email Address (*private)

 Website (*optional)

 

MXStudio © 2003-2010. Todos os direitos reservados.
É expressamente proibido a cópia, reprodução e difusão dos textos, fotos e outros elementos contidos neste site sem autorização expressa do MXStudio.