我想在flex Sprite
中添加一个“简单”Canvas
。
我这样做:
var uic:UIComponent=new UIComponent;
var s:Sprite=new Sprite(); //<-- my simple Sprite
uic.addChild(s);
myCanvas.addChild(uic);
Sprite
已正确添加到Canvas
,但现在,我需要根据Canvas
大小激活Sprite
ScrollBar。 (画布有固定的尺寸)
任何想法都很好,
由于
答案 0 :(得分:4)
您发现的问题是普通的UIComponent没有向其父级报告宽度或高度值(因为它根本不知道该值应该是什么!)。
如果你必须在Flex中使用简单的Sprites和其他原始显示对象,我建议创建一个UIComponent的子类,并覆盖measure()
函数。在那里,将measuredWidth和measuredHeight属性设置为UIComponent的子项的大小。
这是一个你可能想要尝试的快速(和未经测试)的解决方案(在你的UIComponent子类中将取代普通的UIComponent):
override protected function measure():void
{
super.measure();
for(var i:int = 0; i < this.numChildren; i++)
{
var child:DisplayObject = this.getChildAt(i);
this.measuredWidth = Math.max(this.measuredWidth, child.x + child.width);
this.measuredHeight = Math.max(this.measuredHeight, child.y + child.height);
}
}
就个人而言,只要有可能,我会尝试使所有内容成为UIComponent的正确子类,而不是创建这样的hacks,以使Sprite或其他非UIComponent类型在Flex的容器内工作。但是,您的方法似乎很常见,所以希望这对您和其他人有用。