2010-11-14 97 views
0

Voici mon problème. J'ai une application fenêtrée dans Flash Builder avec du code puis une image.Flash Builder 4: Comment faire patienter un composant pour un événement?

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         xmlns:flexlib="http://code.google.com/p/flexlib/" preinitialize="loadImage()"> 
    <fx:Script><![CDATA[ 
     import flash.display.BitmapData; 
    import flash.utils.ByteArray; 

    import mx.controls.Image; 
    import mx.core.UIComponent; 
    import mx.graphics.codec.JPEGEncoder; 
    import mx.utils.Base64Encoder; 

    private var image:Bitmap; 
    private var base64image:String=""; 
    private var sleepInt:int; 

    private function loadImage():void 
    { 
     var loader:Loader = new Loader; 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded); 
     loader.load(new URLRequest("mypic.jpg")); 
     trace("started loading"); 
    } 
    private function getimg():String 
    { 
     trace("flexlib accessing image ", base64image); 
     return base64image; 
    } 
     private function imageLoaded(event:Event):void 
    { 
     image = new Bitmap(event.target.content.bitmapData); 
     base64image = getBase64FromComponent(image); 
     trace("image converted"); 
    } 


    ]]></fx:Script> 

    <flexlib:Base64Image value="{getimg()}"/> 
</s:WindowedApplication> 

La balise flexlib doit afficher une image à partir d'une chaîne. Je veux charger une image dans le code ActionScript, la convertir en une chaîne et puis dessiner. Cependant, dès que l'application démarre, elle tente de restituer la chaîne, qui est toujours vide.

La trace est comme ça, pour une raison quelconque le getimg() est appelée deux fois: flexlib accéder à l'image
commencé à charger flexlib accéder à l'image
image convertie

Comme vous pouvez le voir, l'image n » t converti jusqu'à ce que flexlib essaie de le dessiner. La solution serait de faire attendre le composant flexlib pour l'événement imageLoaded. Comment puis-je faire ceci?


Nous vous remercions d'avoir répondu, mais l'événement applicationComplete est appelé après l'événement preinitialize, et donc fait qu'empirer les choses:

flexlib accessing image 
flexlib accessing image 
started loading 
image converted 

Répondre

0

Dans la balise WindowedApplication changement preinitialize = "loadImage()" pour applicationComplete = "loadImage()"