rads@rads.com.br | Mapa do site
     
 
Galeria de imagens com XML
 
  20/02/2008  
     
 

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!

Fonte: Imasters
Por: M. Dayvson

 
     
   
     
  MATÉRIAS ANTERIORES - Clique na matéria para ler  
     
  53 Galeria de imagens com XML
52 Galeria de Fotos XML
51 Classe Sound (Detalhada)
50 Inserção e Deleção de pastas no servidor com classes e componentes personalizados
49 Menu para Botão Direito
48 Montando um sistema de tickers com Flash + XML + PHP + MySQL
47 Integrando o Flash ao SQL Server
46 Enquete utilizando Flash + PHP
45 Interação do Flash com PHP e MySQL - Exibir, Inserir, Editar e Excluir
44 Legendas no Flash Video com XML
43 MovieClipLoader e loadMovie
42 Flash MX: LoadMovie
41 Preenchendo um comboBox no Flash
40 Interação do Flash com PHP e MySQL
39 Colorindo a imagem vinda da webcam dinâmicamente
38 Recebendo XML no Flash
37 Formulário de Contato utilizando a UI, focusManager e Tween class
36 Desenvolvendo um Tocador de Vídeo em Flash
35 Iniciando Flash + PHP
34 Mascarando campos TextInput e TextField
33 Legendas no Flash Video com XML
32 Populando um DataGrid com Imagens
31 Preload de Componentes
30 Game Design
29 Ativando automaticamente o controle activex
28 Flash 8 com Flash Lite 2 - Desenvolvendo uma aplicação para Celular com XML
27 Banner expansíveis - Dicas úteis
26 Drag and Drop
25 Quebra-cabeça
24 Banco de dados de senha
23 Loader e Progress Bar
22 Reprodução automática em CD de apresentação Flash
21 Combo Box
20 Duplicação de MovieClips
19 Criando um VideoPlayer de FLV no Flash - Parte 1
18 RadioButton
17 CheckBox
16 Técnicas de pré-carregamento
15 Galeria de fotos facilitada
14 Calendário
13 Scroll para MovieClips e TextFields
12 Carregar .SWF dentro de outra cena
11 Criando um Editor HTML com o MM Flash
10 Flash MX: Formulário em ASP
09 Como carregar dados INDIVIDUALMENTE do MySql no Flash
08 SetInterval
07 Sistema de gráfico no Flash
06 Login e senha em poucas linhas
05 Cálculo matemático - Teorema de Pitágoras
04 Fontes pixel e vetores
03 Efeito Matrix
02 Contador Flash + PHP
01 Formulário Flash + PHP