2009-11-16 3 views
0

Я долгое время боролся с этой проблемой, и я предполагаю, что решение довольно просто.Ширина/высота динамически загружаемого изображения

В моем приложении Flex у меня есть компонент, расширяющий UIComponent, где я загружаю изображения во время выполнения и пытаюсь их отобразить. Я пробовал много разных подходов (используя beginBitmapFill(), используя разные контейнеры), но я не могу заставить вещи работать так, как я хочу. Проблема, похоже, связана с свойствами ширины и высоты изображения, которые не обновляются корректно. Идея такова: ширина и высота

var sprite:Sprite = new Sprite(); 
addChild(sprite); 

var im:Image = new Image(); 
im.addEventListener(Event.COMPLETE, function(e:Event):void { 
    sprite.addChild(im); 
} 
im.load('path/image.png'); 

Образ по-видимому, не будет правильным, если он загружен. Я получаю width == 0 (и ничего не отображается), но свойство $ width кажется правильным. Как я могу заверить, что ширина и высота загруженного изображения обновлены?

ответ

3

Это проблема времени, и имхо ошибка в классе изображения, потому что класс изображения ломает ожидания пользователей.

Дело в том, класс изображения первого делает загрузку (и в конечном итоге отправляет COMPLETE), и затем делает измерение (и масштабирование), а затем обновляет значения правильно (в результате большую часть времени в другом случае UPDATE) ,

Итак, когда я впервые наткнулся на эту проблему, мое решение состояло в том, чтобы сначала прослушать событие COMPLETE, а затем добавить прослушиватель в UPDATE (вы не можете просто слушать обновление, потому что обычно это будет отправлено хотя бы один раз во время создания или скачать), но это довольно плохой взлом.

Я уверен, что на этот вопрос был дан ответ на stackoverflow, и, вероятно, были лучшие решения.

PS: также остерегаться разница между шириной и contentWidth, просто чтобы быть уверенным :)

+0

contentWidth работал в моем случае, вместо ширины, не уверен, что они точно такие же, но «ширина» является верный. – Artemix

1

попробовать с Event.INIT вместо Event.COMPLETE

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