| 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:

Os nomes em vermelho são as instancias 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:

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:

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:


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 |
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á.
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
Troque “mc.bt” por “mc” apenas
Nessa galeria posso carregar swf em vez de jpg, apenas mudando o xml?
Alguem pode dizer se existe alguma galeria dinâmica que aceite ficheiros PNG com transparência?
Obrigado e Parabéns pelo tutor.
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.
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í!
Não consegui!
Alguém pode fornecer o FLA?
Grato pela atenção.
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?
também não consegui fazer. Se tiver aula em video no youtube, mandae fazendo o favor.
O scroll tbm não consegui fazer :/
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
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..
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!!!
Tentei de tudo mas não consegui fazer o scroll funcionar, alguem testou esse tutorial e deu tudo certo?
Depois de tanto sufoco, consegui entender o scrollBar. \o/
Quando formos colocar o alvo dele nos “parameters” é só colocar “recebe”, daí ele irá movimentar o movieClip “Recebe” que é o local que recebe os thumbs.
fantastico….passado 1 dia na luta com isso, venci eu a luta! =D!
ta feito o que queria fazer! muito obrigado pela ajuda….tem alguns probleminhas, mas claro k não pod ser perfeito, senão não tem piada
Valeu pelo tutorial, mas para quem é novato no flash as coisas complicam, não têm uma video-aula.
mais um vez parabens pelo tutorial.
valeu