2011-01-10 7 views
0

Ich verfolge diese Hilfeseite eine benutzerdefinierte preloader Sprite erstellen erstreckt, um eine Animation SWF zu laden, aber es funktioniert nicht (die SWF-Animation nicht angezeigt wird):Flex 4 Benutzerdefinierte Preloader nicht arbeiten

http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf 69084-7e3c .html # WS2db454920e96a9e51e63e3d11c0bf62d75-7feb

Ich weiß, dass die Animation.swf-Datei in Ordnung ist, denn wenn ich es in die Haupt-App geladen habe, wird es angezeigt und ausgeführt.

Der Preloader funktioniert, wenn ein Bild vom Preloader anstelle der SWF-Animation geladen wird.

--------------------- test.mxml (Hauptanwendung) -----------------

BTW, ich habe in der Regel viele weitere Zeilen der ComboBox in der App, um den Preloader zur Anzeige zu zwingen, aber die Anzahl der Zeilen hier begrenzt.

--------- -------- customPreloaders.SparkAnimationProgressBar.as --------

Paket customPreloader { import flash.display. ; flash.events importieren.; flash.net importieren. ; importieren flash.utils.;

import mx.events.*; 
import mx.preloaders.*; 

public class SparkAnimationProgressBar extends Sprite 
    implements IPreloaderDisplay{ 

    // Loader instance to load the animation SWF file. 
    private var animationLdr:flash.display.Loader; 
    public function SparkAnimationProgressBar() { 
    super(); 
    } 

    // Add event listeners. 
    public function set preloader(preloader:Sprite):void { 
    preloader.addEventListener(
     ProgressEvent.PROGRESS, handleProgress); 
    preloader.addEventListener(
     Event.COMPLETE, handleComplete); 
    preloader.addEventListener(
     FlexEvent.INIT_PROGRESS, handleInitProgress); 
    preloader.addEventListener(
     FlexEvent.INIT_COMPLETE, handleInitComplete); 
    } 

    // Initialize the Loader control in the override 
    // of IPreloaderDisplay.initialize(). 
    public function initialize():void { 
    animationLdr = new flash.display.Loader(); 
    animationLdr.contentLoaderInfo.addEventListener(
     Event.COMPLETE, loader_completeHandler); 
    animationLdr.load(new URLRequest("assets/Animation.swf")); 
    } 

    // After the SWF file loads, set the size of the Loader control. 
    private function loader_completeHandler(event:Event):void 
    { 
    addChild(animationLdr); 
    animationLdr.width = 200; 
    animationLdr.height= 200; 
    animationLdr.x = 100; 
    animationLdr.y = 100; 
    } 

    // Define empty event listeners. 
    private function handleProgress(event:ProgressEvent):void {}  
    private function handleComplete(event:Event):void {}  
    private function handleInitProgress(event:Event):void {} 

    private function handleInitComplete(event:Event):void { 
    var timer:Timer = new Timer(2000,1); 
    timer.addEventListener(TimerEvent.TIMER, dispatchComplete); 
    timer.start(); 
    } 

    private function dispatchComplete(event:TimerEvent):void { 
    dispatchEvent(new Event(Event.COMPLETE)); 
    } 
    // IPreloaderDisplay interface methods. 
    public function get backgroundColor():uint { 
    return 0; 
    } 
    public function set backgroundColor(value:uint):void {} 
    public function get backgroundAlpha():Number { 
    return 0; 
    } 
    public function set backgroundAlpha(value:Number):void {} 
    public function get backgroundImage():Object { 
    return undefined; 
    } 
    public function set backgroundImage(value:Object):void {} 
    public function get backgroundSize():String { 
    return ""; 
    } 
    public function set backgroundSize(value:String):void {} 
    public function get stageWidth():Number { 
    return 200; 
    } 
    public function set stageWidth(value:Number):void {} 
    public function get stageHeight():Number { 
    return 200; 
    } 
    public function set stageHeight(value:Number):void {} 

} }

+0

Versuchen Sie, Event.INIT anstelle von Event.COMPLETE auf dem Loader zu hören (wenn Sie ein ActionScript in der Animation haben). Ich würde die Animation nicht zur Laufzeit für einen Preloader laden. Ich würde die Animation mit dem Tag "Embed" einbetten und das Symbol der Animation in der Bibliothek angeben. Lassen Sie das Haupt-SWF sich stattdessen auf das Laden konzentrieren. –

Antwort

0

Ich erinnere mich, es gibt harte Beschränkungen auf Ihren benutzerdefinierten preloader. Es (Assets/Animation.swf) sollte eine Flash-Animation von genau 100 Folien sein. Wahrscheinlich könnte das der Grund sein.