我很久以来一直在努力解决这个问题,我猜这个解决方案非常简单。
在我的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');
图片的宽度和高度在加载时似乎不正确。我得到宽度== 0(并没有显示任何内容),但属性$ width似乎是正确的。如何确保加载图像的宽度和高度更新?
答案 0 :(得分:3)
这是一个计时问题,而且图像类中存在一个错误,因为图像类打破了用户的期望。
问题是,图像类首先进行下载(并最终调度COMPLETE),然后进行测量(和缩放),然后正确更新值(大部分时间都在另一个UPDATE事件)。
所以当我第一次偶然发现这个问题时,我的解决方案是首先听取COMPLETE事件,然后向UPDATE添加一个监听器(你不能只听取更新,因为这通常会在创建过程中至少调度一次或下载),但这是一个糟糕的黑客。
我很确定这个问题之前已经在stackoverflow上得到了解答,并且可能有更好的解决方案。
PS:还要注意宽度和contentWidth之间的区别,只是为了确保:)
答案 1 :(得分:1)
尝试使用Event.INIT而不是Event.COMPLETE