“我尝试过覆盖 mx:Canvas 组件的 updateDisplayList() 方法,但这似乎只会在拖动后更新绘图。我希望线条在拖动时跟随 mx:Panel。”
您可以在面板中监听MoveEvent.MOVE
事件并让处理程序调用重新绘制线条,然后让面板在它们被拖动时通过监听MouseEvent.MOUSE_MOVE
舞台中的MOVE
事件并在处理程序中调度事件来调度这些事件(附上这个处理程序到面板的MouseEvent.MOUSE_DOWN
事件处理程序中的阶段,以及处理程序MouseEvent.MOUSE_UP
(也附加到阶段)- 然后从处理程序中的阶段删除这两个事件侦听器MOUSE_UP
。)
这是一个示例(这将在 Panel 子类中:)
private function attachListeners():void
{
this.addEventListener(MouseEvent.MOUSE_DOWN, selfMouseDownHandler, false,0,true);
this.addEventListener(MoveEvent.MOVE, selfMoveHandler, false,0,true);
}
private function selfMoveHandler(event:MoveEvent):void
{
redrawConnectedLinks();
}
private function selfMouseDownHandler(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler, false,0,true);
stage.addEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler, false,0,true);
}
private function stageMouseUpHandler(event:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUpHandler, false);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, stageMouseMoveHandler, false);
}
private function stageMouseMoveHandler(event:MouseEvent):void
{
dispatchEvent(new MoveEvent(MoveEvent.MOVE));
}