Flex tipy a triky – vlastní preloader
30.11.2006· Autor: Ondřej Brichta·
Počet komentářů: 2
Vytvoření vlastního preloaderu, který se bude zobrazovat během inicializace a stahování, bude patřit mezi časté kroky při vývoji těchto aplikací. Dnes si ukážeme jeden z možných postupů v přípravě vlastního preloaderu.
Rozšíření třídy DownloadProgressBar
Za zobrazení preloaderu před spuštěním samotné aplikace je zodpovědný objekt třídy DownloadProgressBar. Proto, pokud chceme využít již připravené třídy, použijeme právě tuto. Vlastn třídu vytvoříme volbou v hlavní menu: File - New - ActionScript Class

V zobrazeném okně doplníme název balíčku(adresáře), kde chceme mít novou třídu uloženou -"preloaders" a dále doplníme název třídy - „Preloader_1".
Automaticky se nám vytvoří příslušný adresář se souborem s koncovkou „as". Tyto soubory obsahují samotný ActionScript - třídy, nebo externí ActionScript příkazy.
Pokračujeme vytvořením vlastní třídy preloaderu:
package preloaders
{
import flash.net.*;
import flash.display.*;
import flash.text.*;
import flash.utils.*;
import flash.events.*;
import mx.preloaders.*;
import mx.events.*;
import mx.effects.Fade;
public class Preloader_1 extends DownloadProgressBar {
private var textPole:TextField;
private var efekt:Fade = new Fade(this);
public function Preloader_1() {
//inicializace
super();
//umístění preloaderu na scéně
this.x = 400;
this.y = 300;
//nastavení vlastností efektu zmizení
efekt.alphaFrom = 1.0;
efekt.alphaTo = 0.0;
efekt.duration = 2000;
//obrázek preloaderu
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("pict.jpg");
pict.load(url);
addChild(pict);
//vytvoření textového pole
textPole = new TextField();
textPole.y = 100;
textPole.width = 200;
textPole.height = 50;
addChild(textPole);
}
//detektory jedotlivých událostí
override public function set preloader(preloader:Sprite):void {
preloader.addEventListener(ProgressEvent.PROGRESS,_Progress);
preloader.addEventListener(Event.COMPLETE,_Complete);
preloader.addEventListener(FlexEvent.INIT_PROGRESS,_InitProgress);
preloader.addEventListener(FlexEvent.INIT_COMPLETE,_InitEnd);
}
//detekce stažení aplikace
private function _Progress(event:ProgressEvent):void {
textPole.text = "Načteno: " + event.bytesLoaded +" z celkových: " + event.bytesTotal;
}
//detekce dokončení stahování
private function _Complete(event:Event):void {
textPole.text = "Hotovo";
}
//detekce inicializace aplikace
private function _InitProgress(event:Event):void {
textPole.text = "Příprava aplikace";
}
//detekce hotové inicializace aplikace
private function _InitEnd(event:Event):void {
textPole.text = "Aplikace připravena";
//spuštění efektu
efekt.play();
//spoždění 2s pro zobrazení efektu
var timer:Timer = new Timer(2000,1);
timer.addEventListener(TimerEvent.TIMER, dispatchComplete);
timer.start();
}
//spuštění události COMPLETE pro odstranění preloaderu
private function dispatchComplete(event:TimerEvent):void {
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
Na začátku jsme si uvedli, že naše třída rozšiřuje původní třídu DownloadProgressBar, proto musíme při její deklaraci použít výraz „extends". Následuje samotná metoda stejného názvu, která vytvoří objekt této třídy. Vlastní preloader se pak skládá z obrázku a textového pole, které informuje o stavu načítání a inicializaci aplikace.
Jednotlivé stavy načítání detekujeme příslušnými listenery, které je nutné přiřadit konkrétním událostem objektu preloaderu a které se starají o aktualizaci textu v poli „textPole".
Po dokončení (inicializaci) aplikace vyčkáme dvě vteřiny, ve kterých necháme samotný preloader zmizet. Samotný efekt zmizení se ovšem aplikuje pouze na načtený obrázek, zatímco textové pole zůstává efektem nedotčené. Pokud bychom chtěli aplikovat efekt i na textové pole, musíme společně se SWF souborem exportovat příslušný font. Vložení fontu se provede zápisem:
[Embed(source='Verdana.ttf', fontName='verdana', mimeType='application/x-font')]
private var verdana_font:Class;
Přiřazení fontu k textovému poli musíme provést přes objekt třídy TextFormat:
var format:TextFormat = new TextFormat();
format.font = "verdana";
format.color = 0x000000;
format.size = 10;
textPole.autoSize = TextFieldAutoSize.CENTER;
textPole.embedFonts = true;
textPole.defaultTextFormat = format;
Po této úpravě bude animován i text samotného textového pole preloaderu. Posledním krokem pak bude přiřazení nové třídy k preloaderu celé aplikace:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" preloader="preloaders.Preloader_1"> ...
Ondřej Brichta Vývojář multimediálních aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server
Web:
http://www.obria.cz
|
Motto: <°))))><
Seriál:
Tipy a triky
Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací