2010-04-21 4 views
0

Я пытаюсь подключить некоторый из моего класса actionscript, унаследованный от Sprite, к моему приложению Flex, подключив его к UIComponent, а затем добавьте UIComponent в панель. Однако размер моего класса Sprite больше, чем панель. Поэтому я пытаюсь изменить его размер с помощью свойства DisplayObject.scale, но мне нужно знать размер моего контейнера. Поскольку я пытаюсь сделать свой код повторно используемым, я полагаю, что я должен позволить классу Sprite обрабатывать размер, получая его через его родительское свойство (скажем, я могу изменить его размер с помощью набораFlex: как изменить размер DisplayObject для панели в приложении Flex

this.scaleX = this.parent. Ширина/this.width или что-то вроде этого)

Однако, родители моего Sprite класса, который является UIComponent, имеет ширину/высоту 0. Итак, мой вопрос: 1) есть ли лучший способ изменить размер Класс DisplayObject подходит для своего контейнера при прикреплении к объекту Flex? 2) Если вы знаете, почему мой размер UIComponent остается 0, а мой DisplayObject по-прежнему отображается в полном размере?

Вот мой код, с помощью Flash Builder 4:

 
private var loader:Loader = new Loader(); 
private function testLoader():void { 
    var urlRequest:URLRequest = new URLRequest("http://localhost/welcome.png"); 
    loader.load(urlRequest); 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderLoadComplete); 
} 

private function onLoaderLoadComplete(e:Event):void { 
    loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoaderLoadComplete); 
    var ui : UIComponent = new UIComponent(); 
    ui.addChild(loader); 
    panelTest.addElement(ui); 
    trace("ui.width = " + ui.width); 
    trace("ui.height = " + ui.height); 
    trace("loader.width = " + loader.width); 
    trace("loader.height = " + loader.height); 
    trace("panelTest.width = " + panelTest.width); 
    trace("panelTest.height = " + panelTest.height); 
} 



И это результат при запуске:

 
ui.width = 0 
ui.height = 0 
loader.width = 571 
loader.height = 411 
panelTest.width = 480 
panelTest.height = 320 

ответ

0
  1. Я думаю, что это наоборот: родитель должен установить размер дочернего элемента при рендеринге. Вы можете переопределить метод updateDisplayList (unscaledWidth: Number, unscaledHeight: Number), чтобы установить размер вашего ребенка-загрузчика. См. Advanced Visual Components in ActionScript.
  2. Я думаю, что размер вашего ui на самом деле не равен 0. Размер обновляется позже после макета и процесса рендеринга. Поэтому вам нужно дождаться завершения макета после добавления компонента к сцене.
+0

Я изменил код для отслеживания после того, как пользовательский интерфейс был добавлен к стадиям, как это: частная функция onLoaderLoadComplete (е: Event): недействительный { loader.contentLoaderInfo.removeEventListener (Event.COMPLETE, onLoaderLoadComplete); \t \t \t ui.addChild (loader); ui.addEventListener (событие.ADDED_TO_STAGE, onUILoadComplete); panelTest.addElement (ui); } – ohm

+0

приватная функция onUILoadComplete (e: Event): void { ui.removeEventListener (событие.ADDED_TO_STAGE, onUILoadComplete); след ("ui.width =" + ui.width); След ("ui.height =" + ui.height); след ("loader.width =" + loader.width); След ("loader.height =" + loader.height); след ("panelTest.width =" + panelTest.width); след ("panelTest.height =" + panelTest.высота); } Результат все тот же – ohm

0

О оставшихся 0, к сожалению, является известным (гррр) Проблема: http://www.mail-archive.com/[email protected]/msg39998.html

Вы можете попытаться получить к нему доступ в взломанной способом (с использованием mx_internal имен): get width of dynamically created custom uicomponent

Добавление спрайта также может быть полезным. Это можно сделать, добавив загрузчик в исходную группу: http://www.actionscript.org/forums/showthread.php3?p=728034

Наслаждайтесь.

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