2009-11-11 8 views
0

В моем приложении flex есть средство визуализации элементов для TileList, которое я использую. Загружаю изображение в рендерер элемента во время выполнения. Для изменения ширины и высоты изображения я использую следующий код. Но, похоже, это не работает. Я отлаживал приложение flex и обнаружил, что фактические значения ширины и высоты присваиваются. Но изображение никогда не выглядит правильным. Вот мой код:Динамическое изменение размера изображения

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; 
} 

ответ

0

Хорошо, на днях я столкнулся с проблемой, и я исправил ее с помощью класса Loader. Вы можете получить информацию после загрузки файла. Вам также нужен прослушиватель событий, прикрепленный к загрузчику. Откуда вы получаете изображение из любой точки? URL или файловая система?

Вот краткий пример:

package 

{ импорт flash.display.Loader; импорт flash.events.Event; импорт 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 
    } 

    */ 
} 

}

надежда, что помогает

1

Значение contentWidth и contentHeight свойства не является окончательным, когда complete события. Вы можете получить значение после запуска события updateComplete.

+0

Да. Это то, что я попробовал вначале. Но ширина и высота, которые я получал с этапа updateComplete, были ноль и ноль. Но когда я попытался использовать событие Complete, я получил реальные значения. Проблема в том, что изображение не получает эти значения. Или они назначаются, но изображение не изменяется визуально. – CodeQrius

Смежные вопросы