如何添加事件侦听器以检测DisplayObject的高度何时发生变化。
我有一个带有边框的Sprite,当内部任何对象改变高度或被添加时,需要调整大小。
感谢。
约什
答案 0 :(得分:2)
displayObject.addEventListener(ResizeEvent.RESIZE, onResize);
function onResize(event:ResizeEvent):void
{
// handle it here
}
答案 1 :(得分:2)
我认为这是一个flash而不是Flex问题......这就是为什么mx.events.ResizeEvent
(由UIComponent和子类调度)以及所有这种时髦的Flex内容都无法工作...如果你使用Flex和UIComponents,这是最好的方式......
问题是,这个事件没有生成......
Graphics
是final
...除了,覆盖吸气剂并设置超时,当吸气剂是用于,1毫秒后检查更改(并确保最多1次超时)...... 最简单的事情就是观察enterframe的宽度/高度,如果它们从一帧变为另一帧,那么重绘边框......这更有意义,因为你不需要重绘如果你试图抓住任何可能意味着调整大小的动作,那么边框会超过一帧一帧,这种效果很可能发生......真的,比较两个浮点数非常便宜......:)
希望有所帮助......
格尔茨
back2dos
答案 2 :(得分:0)
创建自定义事件类:
package com
{
class ChildResizeEvent extends Event
{
public static var RESIZE:String = "resize";
public static var ADDED:String = "added";
}
}
在主Sprite MXML中,您可以使用:
<mx:Metadata>
[Event(name="onChildResize", type="com.ChildResizeEvent")]
</mx:Metadata>
然后当事件发生时(当一个对象改变高度或被添加时),你发送:
function onInteriorObjectHeightChange(event:Event):void
{
dispatchEvent(new ChildResizeEvent(ChildResizeEvent.RESIZE));
}
答案 3 :(得分:0)
起初,我很惊讶DisplayObject类的实现在调整其宽度和高度属性或重新计算内容的大小时不调度Event.RESIZE事件,但出于性能原因,这很有意义。 / p>
我考虑过使用Event.RENDER事件,但我正在TextField上监听它,我正在通过脚本疯狂地调整大小...尽管文本重新包装,框扩展并且光标闪烁......它永远不会发射一个RENDER事件。令人惊讶的是,它只会在文本发生变化时触发RENDER事件,这只会显示RENDER事件是多么无用。
我建议您:
逻辑上,您选择的方法应取决于您对DisplayObject更改大小的可能性的了解: