Apache flex Flex:如何调整DisplayObject的大小以适应Flex应用程序中的面板

Apache flex Flex:如何调整DisplayObject的大小以适应Flex应用程序中的面板,apache-flex,actionscript-3,actionscript,flex3,uicomponents,Apache Flex,Actionscript 3,Actionscript,Flex3,Uicomponents,我正试图将从Sprite继承的一些actionscript类附加到Flex应用程序,方法是将其附加到UIComponent,然后将UIComponent添加到面板。但是,我的Sprite类的大小似乎比面板大。因此,我尝试使用DisplayObject.scale属性调整它的大小,但我需要知道容器的大小。由于我试图使我的代码可重用,我想我应该让我的Sprite类通过其父属性来处理调整大小(比如,我可以通过设置来调整大小) this.scaleX=this.parent.Width/this.Wid

我正试图将从Sprite继承的一些actionscript类附加到Flex应用程序,方法是将其附加到UIComponent,然后将UIComponent添加到面板。但是,我的Sprite类的大小似乎比面板大。因此,我尝试使用DisplayObject.scale属性调整它的大小,但我需要知道容器的大小。由于我试图使我的代码可重用,我想我应该让我的Sprite类通过其父属性来处理调整大小(比如,我可以通过设置来调整大小)

this.scaleX=this.parent.Width/this.Width或类似的内容)

但是,我的Sprite类的父类是UIComponent,其宽度/高度为0。 所以,我的问题是: 1) 当连接到Flex对象时,有没有更好的方法调整DisplayObject类的大小以适应其容器? 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); } 私有变量加载器:加载器=新加载器(); 私有函数testLoader():void{ var urlRequest:urlRequest=新的urlRequest(“http://localhost/welcome.png"); loader.load(url请求); loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaderLoadComplete); } 私有函数onLoaderLoadComplete(e:事件):void{ loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoaderLoadComplete); var ui:UIComponent=新的UIComponent(); ui.addChild(加载器); panelTest.addElement(用户界面); 跟踪(“ui.width=“+ui.width”); 跟踪(“ui.height=“+ui.height”); 跟踪(“loader.width=“+loader.width”); 跟踪(“loader.height=“+loader.height”); 跟踪(“panelTest.width=“+panelTest.width”); 跟踪(“panelTest.height=“+panelTest.height”); } 这是运行时的结果:

ui.width = 0 ui.height = 0 loader.width = 571 loader.height = 411 panelTest.width = 480 panelTest.height = 320 ui.width=0 ui.height=0 加载器宽度=571 装载机高度=411 panelTest.width=480 panelTest.height=320
  • 我认为情况正好相反:父元素应该在渲染时设置子元素的大小。您可以重写updateDisplayList(unscaledWidth:Number,unscaledHeight:Number)方法来设置加载程序子级的大小。看
  • 我猜你的用户界面的大小不是0。稍后在布局和渲染过程后更新大小。因此,在将组件添加到stage之后,您必须等待布局完成

  • 关于剩余的0,不幸的是,这是一个已知(grrr)问题:

    您可以尝试以黑客的方式访问它(使用mx_内部名称空间):

    将精灵直接添加到面板也可能会有所帮助。这可以通过将加载程序添加到面板的子级来完成:


    喜欢。

    我修改了代码,以便在ui添加到stage后进行跟踪,如下所示:私有函数onLoaderLoadComplete(e:Event):void{loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,onLoaderLoadComplete);ui.addChild(loader);ui.addEventListener(Event.added_to_-stage,onIloadComplete);panelTest.addElement(ui);}私有函数onUILoadComplete(e:Event):void{ui.removeEventListener(Event.ADDED_TO_STAGE,onUILoadComplete);trace(“ui.width=“+ui.width”);trace(“ui.height=“+ui.height”);trace(“loader.height=“+loader.height”);trace(“panelTest.width=“+panelTest.width”);trace(“panelTest.height=“+panelTest.height);}结果仍然相同