Popolare un DataGrid da XML

September 26th, 2008

Tool: Flex 3.0
Actionscript 3.0

Risorse: Popolare un DataGrid da XML

In questo breve esempio vedremo come popolare un DataGrid con pochissine righe di codice MXML senza l’ausilio di Actionscript 3.0, facendo invece clic sul link di Risorse si vedrà un altro approccio basato su un pò di codice actionscript 3.0 (c’è anche da considerare che gli xml dei due esempi sono diversi).

Codice MXML:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	layout="absolute" creationComplete="xmlLoad.send()">

<mx:HTTPService url="xml/agenda.xml" resultFormat="e4x" id="xmlLoad" />

<mx:Panel width="100%" height="80%" right="10" left="10" top="10">
<mx:DataGrid id="agendaDG" dataProvider="{xmlLoad.lastResult.data}" height="100%">
<mx:columns>
<mx:DataGridColumn dataField="@firstname" width="200" headerText="Nome" />
<mx:DataGridColumn dataField="@surname" width="200" headerText="Cognome" />
<mx:DataGridColumn dataField="@address" width="250" headerText="Indirizzo" />
<mx:DataGridColumn dataField="@phone" width="150" headerText="Telefono" />
</mx:columns>
</mx:DataGrid>
</mx:Panel>

</mx:Application>

Link:

Gallery XML con scrolling verticale

September 26th, 2008

Tool: Flash CS 3
Actionscript 3.0

Una gallery XML  semplicissima in Actionscript 3.0, la gallery è corredata di uno scrolling verticale e di una Classe per il preload delle immagini. La classe è riutilizzabile anche per altri progetti in AS 3.0. Le transizioni sulle immagini sono effettuate con l’uso delle caurina.transitions.Tweener, una classe usata per la creazione di tweenings e altre transitions attraverso codice actionscript.

Passiamo al codice:

/* Eseguiamo l’import delle Caurina transition e della Classe CustomLoader*/
import caurina.transitions.*;
import net.iwc.CustomLoader;

// Dichiariamo alcune variabili
var xmlFile:String = “gallery.xml”;
var pathImage:String = “images/”;
var yPos:int;
var nodeCount:int;
var counter:int = 0;
var xml:XML;
var intervalDuration:int = 1000;
var intervalID:int;
var descrArr:Array = new Array;
var lgImageArr:Array = new Array;
var listNode:XML;
var preloadPoint:Point = new Point(10, 10);
var loader_ldr:CustomLoader

//Creiamo in runtime il box che conterrà le clip immagine
var contentBox:MovieClip = new MovieClip();
contentBox.x = 0;
contentBox.y = 0;
addChild(contentBox);

//Creiamo in runtime una mask che poi applicheremo al contentBox
var masker:MovieClip = new MovieClip();
masker.graphics.beginFill(0×333333,1);
masker.graphics.drawRect(0, 5, 100, 380);
masker.graphics.endFill();
addChild(masker);

//Creiamo in runtime un contenitore dove caricheremo l’immagine di dettaglio
var container_mc:MovieClip = new MovieClip();
container_mc.x = 150;
container_mc.y = 10;
addChild(container_mc);

//Aggiungiamo una funzione per il caricamento dell’xml
function callXML():void {
var urlRequest:URLRequest = new URLRequest(xmlFile);
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, xmlLoaded);
loader.load(urlRequest);
}

callXML();

//Aggiungiamo una funzione per leggere il contenuto dei nodi xml
function xmlLoaded(e:Event):void {
var loader:URLLoader = URLLoader(e.target);
xml = new XML(loader.data);

nodeCount = xml..images.smImage.length();
//trace(nodeCount)
for each (listNode in xml..images) {
var descr:String = listNode.descr;
var lgImage:String = listNode.lgImage;
descrArr.push(descr);
lgImageArr.push(lgImage);
}
/*trace(lgImageArr);
trace(descrArr);*/
}

intervalID = setInterval(createList, intervalDuration, descrArr, lgImageArr);

function createList(txt:Array, img:Array):void {
var itemClip:MovieClip = new MovieClip();
itemClip.buttonMode = true;
itemClip.idCur = img[counter]; //creiamo una variabile dinamica idCur
itemClip.curText = txt[counter]; //creiamo una variabile dinamica curText
itemClip.x = 10;
itemClip.y = 10;
itemClip.y = yPos;
yPos += 90;
contentBox.addChild(itemClip);
//trace(yPos)
loader_ldr = new CustomLoader(pathImage + xml..images.smImage[counter], preloadPoint);
loader_ldr.x = 0;
loader_ldr.y = 0;
//loader_ldr.load(new URLRequest(pathImage + xml..product.smImage[counter]));

itemClip.addChild(loader_ldr);
counter++;
//trace(counter);
if (counter == nodeCount) {
//trace(”Clearing Interval”);
clearInterval(intervalID);
}

itemClip.alpha = 0;
Tweener.addTween(itemClip, {alpha:1, time:.7, transition:”linear”});

itemClip.addEventListener(MouseEvent.CLICK, loadContent);
function loadContent(e:MouseEvent) {
//trace(e.currentTarget.idCur)
contentLoaded(e.currentTarget.curText, e.currentTarget.idCur);
}
}

function contentLoaded(text_str:String, pathImg:String) {
var ldr:CustomLoader = new CustomLoader(pathImage + pathImg, preloadPoint);
container_mc.addChild(ldr);
container_mc.alpha = 0;
Tweener.addTween(container_mc, {alpha:1, time:.7, transition:”linear”});
//ldr.load(new URLRequest(pathImage + pathImg));
text_txt.text = text_str;
}
da questo codice ho omesso la parte riguardante il codice sulla scrollbar che trovate all’interno del fla

Download del file

Controllare gli intervalli di tempo con setInterval o la Timer Class

September 23rd, 2008

Tool: Flash CS 3
Actionscript 3.0

Il setInterval.
Il setInterval esegue una funzione a un intervallo specificato (in millisecondi).

La Timer class.
Uno dei modi migliori per gestire il tempo in ActionScript 3.0 è quello di utilizzare la classe Timer (flash.utils.Timer), che può essere utilizzato per l’invio di eventi ogni volta che un intervallo è raggiunto.

Per avviare un timer, è necessario creare un’istanza della classe Timer, ad esempio var myTimer:Timer = new Timer(); in questo modo creiamo un oggetto myTimer..

Il vantaggio dell’uso della classe Timer dovrebbe derivare dal fatto che si fa un dispaccio degli eventi affinchè l’intervallo venga raggiunto, mentre con setInetrval non si dispaccia nessun evento.

Adesso facciamo un esempio con il quale otteniamo a livello di funzionalità lo stesso risultato. Per eseguire questo esempio creiamo una movieclip che funge da pulsante. Alla fine sullo stage dobbiamo avere due istanze di movieclip con i seguenti nomi di istanza: my_btn e my_timer.

Ecco il codice:

// Variabili
var counter:int = 0;
var stopCount:int = 10;
var duration = 200;
var intervalId:int;

// Set Interval
function interval(e:MouseEvent):void {
intervalId = setInterval(repeatInterval, duration);
}

function repeatInterval():void {
counter++;
trace(”contatore: “+counter); // restituisce 1, 2, 3, 4, 5, …..
if (counter == stopCount) {
clearInterval(intervalId);
counter = 0; // azzeriamo il contatore
trace(”clear intervalId!!”);
}
}

my_btn.addEventListener(MouseEvent.CLICK, interval);
my_timer.addEventListener(MouseEvent.CLICK, timerEvent);

// Timer Class

var timer:Timer;

function timerEvent(e:MouseEvent):void {
timer = new Timer(duration, stopCount);
timer.addEventListener(TimerEvent.TIMER, timerHandler);
timer.addEventListener(TimerEvent.TIMER, timerComplete);
timer.start();
}

function timerHandler(e:TimerEvent):void {
counter++;
trace(”contatore: “+counter); // restituisce 1, 2, 3, 4, 5, …..
}

function timerComplete(e:TimerEvent):void {
if (counter == stopCount) {
trace(”clear TimerEvent!!”);
counter = 0; // azzeriamo il contatore
}
}

Ecco alcuni link che possono risultare utili:

FlexCamp 2008

September 10th, 2008

Seconda edizione dei camp dedicati a Flex. Questa edizione del Flexcamp si terrà presso il Ritz Hotel di Milano il 07 Novembre 2008 - 10:00 AM. Le session saranno tenute in Italiano tranne due tenute da speaker internazionali.

Speaker:

  • Jaco Pixeldump (pixeldump.org)
  • Piergiorgio Niero (aka pigiuz wave9 and actionscript.it)
  • Eros Marcon (actionscript.it)
  • Matteo Lanzi (aka Gallo_Teo flex-developers.org)
  • Giorgio Natili (flex-developers.org)

Registrazione all’evento
La partecipazione all’evento è aperta a 75 persone, previa registrazione. Ci si può registrare da qui

Agenda
ILOG Elixir – advanced data visualization in Flex (Eros Marcon):
Introducing ILOG Elixir
Building a little Dashboard application with Elixir components
Using 3D Charts
Using Map displays
Using Gauges and dials
Using Organization Charts and Gantt Charts
Interaction between Elixir components

Design Pattern – apply the design pattern in Flex (Giorgio Natili):
Introducing design patterns
Application Controller Pattern
Model View Presenter
Command Pattern
Facade Pattern

The Bitten Bit - understanding bitmap in flex (Piergiorgio Niero)
BitmapData Class overview
BitmapData manipulation best practices
First Steps with PixelBender

Ruffle
Durante l’evento verranno estratti gadget dell’Adobe e libri O’Reilly tra gli intervenuti ed un premio finale a sorpresa offerto dai nostri sponsors.

Adobe presenta: Colin Moock in tour

June 11th, 2008

Il 23 Giugno Colin Moock sarà a Milano. Sarà una giornata dedicata alla formazione, durante questa giornata saranno coperti gli argomenti che sono trattati nel libro Essential ActionScript 3.0 (O’Reilly, 2007).

La partecipazione all’evento è gratuita. Ci si puo’ registrare da qui.

Menu XML con effetto Fade

April 27th, 2008

Tool: Flash CS 3
Actionscript 3.0

In questo esercizio vedremo come creare un menu da un file Xml, assegnando ad ogni istanza di pulsante creata in runtime una clip filmata residente nella Libreria del filmato, inoltre abbiamo embeddato il font nella libreria.

Passiamo al codice:

// Eseguiamo l'import delle classi per eseguire le transitions

import fl.transitions.*;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.external.*;var intervalDuration:Number = 100;

var intervalId:uint;
var counter:uint;
var itemCount:uint;
var instanceName:Object;
var idCurrent:Number;

var myFont:cmc = new cmc();
var format:TextFormat = new TextFormat();
format.font = myFont.fontName;
format.color = "0xFFFFFF";
format.size = 11;
format.letterSpacing=1;

var menuXML:XML;
var urlXml:String;

urlXml = "xml/menuitem.xml";

function loadXml():void {
var loadXML:URLLoader = new URLLoader();
loadXML.addEventListener(Event.COMPLETE, parseXML);
var requestXML:URLRequest = new URLRequest(urlXml);
try {
loadXML.load(requestXML);
} catch (error:Error) {
trace("File nn trovato");
}
}

loadXml();

function parseXML(evt:Event):void {
menuXML = new XML(evt.target.data);
itemCount= menuXML.nodeMenu.length();
//trace(itemCount)
tweenFadeMenu(300);
}

function tweenFadeMenu(intervalDuration:Number):void {
var xPos:Number = 31.3; // posizione sull'asse delle x della prima voce di menu
var yPos:Number = 51.4; // posizione sull'asse delle y della prima voce di menu
var disty:Number = 19.6; // distanza tra una voce di menu ed un'altra
counter=0;
intervalId = setInterval(tweenMenu,intervalDuration);
//
function tweenMenu():void {
if (counter == itemCount-1) {
clearInterval(intervalId);
}
//
var itemClip:MovieClip = new MovieClip(); // creiamouna clip in runtime
itemClip.name="item"+counter;
itemClip.idbtn=counter;
itemClip.buttonMode=true; // impostiamo la proprietà buttonMode su true per far apparire la manina
itemClip.mouseChildren = false; // con mouseChildren determiniamo se disabilitare o meno la selezione l'oggetto figlio della clip filmata
addChild(itemClip); // aggiungiamo l'istanza "itemClip" alla DisplayObject
itemClip.addEventListener(MouseEvent.CLICK, handlebutton);
itemClip.x=xPos;
itemClip.y=yPos+(disty)*counter;
//
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.defaultTextFormat = format;
tf.selectable = false;
tf.embedFonts=true;
tf.text = menuXML.nodeMenu[counter].@voceMenu;
itemClip.addChild(tf);
//trace(yPos)
var myTween:Tween = new Tween(itemClip, "alpha", Regular.easeIn, 0, 100, 5, true);
counter++;
}
}

// richiamiamo le MovieClip che si trovano nella libreria

var mc1:Myclip_A = new Myclip_A();
var mc2:Myclip_B = new Myclip_B();
var mc3:MyClip_C = new MyClip_C();
var mc4:Myclip_D = new Myclip_D();

// memorizziamo tutte le nostre clip filmato in un Array
var slideArr:Array = new Array (mc1, mc2, mc3, mc4);

// ci creiamo un Sprite dove posizioniamo le istanze di MovieClip della Libreria
var container:Sprite = new Sprite();
addChild(container);
container.x = 300;
container.y = 50;
container.alpha = 0;

function handlebutton(event:MouseEvent):void {
var curtarget:Object = event.target;
idCurrent = curtarget.idbtn;
//trace(idCurrent);

// rimuoviamo dal container la clip attachato

if (container.numChildren>0) {
container.removeChildAt(0);
}

var myFade:Tween = new Tween(container, "alpha", Regular.easeIn, 0, 100, 5, true);
container.addChild(slideArr[idCurrent]);
}

Download del file

Tweener (caurina.transitions.Tweener)

April 13th, 2008

Tweener (caurina.transitions.Tweener) è una classe usata per la creazione di tweenings e altre transitions attraverso codice actionscript. L’idea generale è quella di avere delle animazioni dimaniche, create via codice, facilmente gestibili e più stabili rispetto alle animazioni via timeline.

Tweener si può inquadrare come il successore di MC Tween ed è rivolto sia a designers che ad advanced developers.

Ecco dove potete trovare la documentazione di Tweener: su Google Code.

Potete effettuare il downloads here.

Esempi 

Valori a random

November 17th, 2007

Tool: Flash CS 3
Actionscript 3.0

Con questo esempio vedremo come caricare valori a random. Il primo passo consiste nello scrivere un’Array di nomi, la variabile itemArr sarà poi assegnata alla variabile di tipo Object rnd, quindi definiamo la nostra funzione per poi ottenere i nostri valori caricati a random.

var itemArr:Array = ["A", "B", "C", "D"];
var rnd:Object = itemArr;

function randomHandler():void {
var minItem:int = 0;
var numOfItem:int = itemArr.length - 1;
var range:int = numOfItem - minItem;

var randomItem:int = Math.round(Math.random() * range) + minItem;

//trace(rnd[randomItem]);
//formattiamo il testo con la classe TextFormat
var textFmt:TextFormat = new TextFormat();
textFmt.font = "Courier";
textFmt.size = 30;

//Creiamo un istanza di campo di testo e la formattiamo
var tf:TextField = new TextField();
tf.autoSize = TextFieldAutoSize.LEFT;
tf.x = 10;
tf.y = 10;
tf.defaultTextFormat = textFmt;
tf.text = "Item: " + rnd[randomItem];
addChild(tf);

}

randomHandler();
Download file

Usiamo ENTER_FRAME

November 17th, 2007

Tool: Flash CS 3
Actionscript 3.0

In questo esempio vedremo come utilizzare l’evento ENTER_FRAME in AS 3.0.

L’esercizio è abbastanza semplice da eseguire, creiamo un simbolo di clip filmato con una forma. Nel pannello delle Proprietà di Flash assegniamo un nome di istanza al simbolo, nella fattispecie abbiamo assegnato mc_rect. Quindi dichiariamo una variabile ang di tipo int, dopodichè scrviamo la funzione OnEnterFrame e la richiamiamo con un listener di eventi (this.addEventListener(Event.ENTER_FRAME, OnEnterFrame);).

var ang:int = 0.01;
function OnEnterFrame(evt:Event):void {
//======================
// Rotazione della clip
//======================
mc_rect.rotation++;
mc_rect.scaleX = 2*Math.sin(ang)-2;
mc_rect.scaleY = 2*Math.sin(ang)-2;
//=======================
// Distorsione della clip per larghezza e altezza
//=======================
mc_rect.width = mc_rect.stage.stageWidth / 2;
mc_rect.height = mc_rect.stage.stageHeight / 2;
//========================
// Posizioniamo la clip al centro dello stage
//========================
mc_rect.x = mc_rect.stage.stageWidth / 2;
mc_rect.y = mc_rect.stage.stageHeight / 2;
}
this.addEventListener(Event.ENTER_FRAME, OnEnterFrame);

mc_rect.addEventListener(MouseEvent.MOUSE_OVER, dimAlpha);
mc_rect.addEventListener(MouseEvent.MOUSE_OUT, restoreAlpha);

function dimAlpha(evt:MouseEvent):void {
evt.target.alpha = 0.5;
// Con questa funzione diminuiamo l'alpha
}

function restoreAlpha(evt:MouseEvent):void {
evt.target.alpha = 1.0;
// con questa funzionione ripristiniamo l'alpha iniziale
}

Download file

Meeting sul Video 2.0 a Catania

October 3rd, 2007

Questo seminario gratuito aperto a tutti non è una manifestazione commerciale, ma nasce dalla volontà di dimostrare quanto sia facile produrre e diffondere i contenuti digitali tramite i software Adobe ed Apple.
ActionScript User Group Adobe UG e la AESSE Informatica, grazie alla collaborazione della Viteco S.r.l. di Catania, presentano questa giornata di formazione in cui viene affrontato tutto il flusso di lavoro, dalla cattura alla pubblicazione, per creare una nuova esperienza di comunicazione.

In mattinata, dopo una breve presentazione dei relatori e dell’evento, si apriranno le danze con Final Cut, ed il montaggio non lineare e non distruttivo di Apple.
Ma si parlerà anche di titolazione e compositing con Motion 3, sempre compreso in Final cut studio 2.
Non mancherà qualche esempio sull’editing audio tramite soundtrack pro, e l’integrazione di quest’ultimo con Final Cut.

Alle 13:30, dopo la pausa pranzo, sarà la volta del porting attraverso i software Adobe.
Si parlerà di streaming con Flash Media Server e di conversione del video per la fruizione sui dispositivi mobili con Flash Lite 3.0.

Inoltre, attraverso Director MX 2004, si vedrà come visualizzare lo streaming di un video flv in un ambiente 3D.

Il meeting si terrà a Catania il 9 novembre 2007 e la partecipazione sarà completamente gratuita.

Relatori:
Anastasi Fabrizio (Streaming video in shockwave 3d)
Bennardo Marco (Introduzione al meeting)
Lombardo Giovanni (Final Cut)
Marcon Eros (Flash Media Server)
Messina Fabio (Final Cut)
Natili Giorgio (Flash Lite e mobile learning)

Programma

  • 9:00-10:00 - Inizio lavori
  • 10:00-11:00 - Final Cut Pro 6
  • 11:00-12:00 - Motion 3
  • 12:00-12:30 - Soundtrack Pro 2
  • 12:30-13:30 - Pausa pranzo
  • 13:30-15:00 - Flash Media Server
  • 15:00-16:00 - Flash Lite 3.0 e mobile learning
  • 16:00-17:30 - Streaming video in shockwave 3d
  • 17:30-18:30 - Sessione plenaria su Flash Lite 2.x/3.x, Adobe AIR, HD nel Flash Player, Media Player di Adobe, FinalCut, Motion, Soundtracks, ecc.

Come raggiungerci

Iscriviti

Dettagli Evento: http://www.actionscript.it/showEvent.cfm?id=89