2009-11-11 3 views
0

Dans mon application Flex, il y a un rendu d'élément pour un TileList que j'utilise. Je charge l'image dans le Rendu d'élément lors de l'exécution. J'utilise le code suivant pour redimensionner la largeur et la hauteur de l'image. Mais cela ne semble pas fonctionner. J'ai débogué l'application Flex et constaté que les valeurs réelles de largeur et de hauteur sont affectées. Mais l'image n'a jamais l'air à la bonne taille. Voici mon code:Redimensionnement dynamique de l'image

private function Init() :void 
{ 
    tileImg = new Image(); 
    tileImg.source = data.ICON; 
    tileImg.toolTip = data.TITLE; 
    tileImg.buttonMode = true; 
    tileImg.addEventListener(Event.COMPLETE, AdjustImageDimensions); 
    this.addChild(tileImg); 
} 

private function AdjustImageDimensions(e:Event):void 
{ 
    tileImg.width = (e.currentTarget as Image).contentWidth; 
    tileImg.height = (e.currentTarget as Image).contentHeight; 
} 

Répondre

0

Ok, j'ai eu un problème comme celui-ci l'autre jour et je l'ai corrigé en utilisant la classe Loader. Vous pouvez récupérer les informations après le chargement du fichier. Vous avez également besoin d'un écouteur d'événement attaché au chargeur. Où obtenez-vous l'image de toute façon? Une URL ou un FileSystem?

Voici un exemple rapide:

package 

{import flash.display.Loader; import flash.events.Event; import flash.net.FileReference;

import mx.controls.Image; 

public class MyItemRenderer 
{ 
    private var fileRef:FileReference = new FileReference(); 
    private var myLoader:Loader = new Loader(); 
    public var myDynamicImage:Image; 

    public function MyItemRenderer() 
    { 
     fileRef.addEventListener(Event.SELECT, loadImageToCache); 
     fileRef.addEventListener(Event.COMPLETE, sendToLoader); 

     fileRef.browse(/* put file types in this array */); 
    } 

    private function loadImageToCache(e:Event):void 
    { 
     fileRef.load(); 
    } 

    private function sendToLoader(e:Event):void 
    { 
     myLoader.loadBytes(fileRef.data); 
     myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, createImage); 
    } 

    private function createImage(e:Event):void 
    { 
     var file:Loader = Loader(e.target); 

     myDynamicImage = new Image(); 
     myDynamicImage.source = file; 
     myDynamicImage.width = file.width; 
     myDynamicImage.height = file.height; 
    } 
    //now that would be great if you can control the width and height 
    //of these images at runtime, BUT, 
    //chances are if their dynamically loaded, you can't so here... 

    private function getImgAR(file:Loader):Number 
    { 
     return file.width/file.height; 
    } 

    //then use this createImage function instead... 

    /* 

    private function createImage(e:Event):void 
    { 
     var file:Loader = Loader(e.target); 
     myDynamicImage = new Image(); 
     myDynamicImage.source = file; 
     myDynamicImage.width = 120*getImgAR(file); //you can substitue 120 for your required size 
     myDynamicImage.height = 120;//same here 
    } 

    */ 
} 

}

espoir qui aide

1

La valeur de contentWidth et contentHeight propriétés ne sont pas définitifs lorsque l'événement complete est déclenché. Vous pouvez obtenir la valeur après le déclenchement de l'événement updateComplete.

+0

Oui. C'est ce que j'ai essayé au début. Mais la largeur et la hauteur que j'obtenais de l'étape updateComplete étaient zéro et zéro. Mais quand j'ai essayé d'utiliser l'événement Complete, j'ai eu les vraies valeurs. Le problème est que l'image ne reçoit pas ces valeurs. Ou ils sont assignés, mais l'image ne se redimensionne pas visuellement. – CodeQrius

Questions connexes