apache-flex - 在 Flex/Actionscript 中连接线(拖动时)

标签 apache-flex actionscript-3 air flex3

我有一个 mx:Canvas 元素,其中包含多个 mx:Panel 元素。我希望能够绘制一条连接两个这样的 mx:Panel 的线,以便当一个或两个 mx:Panel 被拖动时,该线继续连接两个 mx:Panel。这看起来应该是一件微不足道的事情,但我一直无法弄清楚。

实际上,这就是问题所在。

alt text http://img150.imageshack.us/img150/5656/ishot1eu3.jpg

由于更新仅在面板到达最终位置时发生,因此一旦您开始拖动“B”面板,就会留下一条悬空线:

alt text http://img212.imageshack.us/img212/4296/ishot2qi6.jpg

如下所示,一个可能的解决方案是重写 mx:Canvas 组件的 updateDisplayList() 方法。不幸的是,这只在拖动后更新绘图,而不是在运动时更新绘图。 监听面板中的“xChanged”和“yChanged”事件会产生与覆盖 updateDisplayList() 相同的结果。

最终的解决方案,如下所述,需要将移动事件从移动面板分派(dispatch)到其正在移动的 Canvas 上。这会迫使线条在整个运动过程中重新绘制。

感谢您的帮助!

最佳答案

"I've tried overriding the updateDisplayList() method of the mx:Canvas component but that seems to only update the drawing after the dragging. I would like for the line to follow the mx:Panel as it is being dragged."

您可以收听 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));
}

关于apache-flex - 在 Flex/Actionscript 中连接线(拖动时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/334846/

相关文章:

php - 如何访问ArrayCollection数据

apache-flex - 是否可以在不使用 Debug模式的情况下找到 ActionScript 3.0 中导致错误的函数和/或行号?

java - 如何在不接收来自 Flex 客户端的消息的情况下从 BlazeDS 推送数据?

css - 无法将 css 样式应用于 flex 中的警报

Flash:addEventListener 未检测到输入文本框中的粘贴事件

actionscript-3 - ActionScript:一个 .as 文件中有多个公共(public)函数?

javascript - 使用 StageWebView.loadString() 在 AIR for iOS 上显示 Google map

java - 最大 as3 adobe JSON 字符串长度

actionscript-3 - TouchEvent.TOUCH_BEGIN, onTouchBegin 在几次重新加载后卡住

actionscript-3 - Actionscript 3.0的良好声音类/库