Flex: как изменить размер DisplayObject, чтобы он соответствовал панели в приложении Flex - PullRequest
0 голосов
/ 21 апреля 2010

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

this.scaleX = this.parent.Width / 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

Ответы [ 2 ]

0 голосов
/ 25 апреля 2010

По поводу оставшихся 0, к сожалению, это известная (grrr) проблема: http://www.mail-archive.com/flexcoders@yahoogroups.com/msg39998.html

Вы можете попытаться получить к нему доступ взломанным способом (используя пространство имен mx_internal): получить ширину динамически создаваемого пользовательского компонента

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

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

0 голосов
/ 21 апреля 2010
  1. Я думаю, что все наоборот: родительский элемент должен устанавливать размер дочернего элемента при рендеринге. Вы можете переопределить метод updateDisplayList (unscaledWidth: Number, unscaledHeight: Number) , чтобы установить размер дочернего элемента загрузчика. См. Расширенные визуальные компоненты в ActionScript .
  2. Я думаю, что размер вашего пользовательского интерфейса на самом деле не равен 0. Размер обновляется позже после макета и процесса рендеринга. Поэтому вам нужно дождаться завершения макета после добавления компонента в stage.
...