一旦我打电话DragManager.acceptDrag
,有什么办法可以“不接受”拖累吗?假设我有一个可以接受拖放的视图,但仅限于某些区域。一旦用户拖动我调用的这些区域之一DragManager.acceptDrag(this)
(从DragEvent.DRAG_OVER
处理程序),但如果用户随后移出该区域,我想将拖动的状态更改为不接受并显示DragManager.NONE
反馈。但是,无论调用DragManager.acceptDrag(null)
还是DragManager.showFeedback(DragManager.NONE)
似乎都没有任何效果。一旦我接受了拖动设置反馈类型,我似乎无法更改它。
明确一点:用户应该能够放置的区域不是组件,甚至不是显示对象,实际上它们只是文本字段文本中的范围(如选择)。如果他们是他们自己的组件,我可以通过让他们每个人单独接受拖动事件来解决它。我想我可以创建漂浮在文本上的代理组件来模拟它,但如果没有必要,我宁愿不这样做。
我现在已经设法让它在 AIR 和浏览器中工作,但只能通过将代理组件放在应该能够放置内容的文本范围的顶部。这样我就得到了正确的反馈,并且在拖动退出时会自动不接受下降。
这是 AIR 中关于 D&D 最奇怪的事情:
DragManager.doDrag(initiator, source, event, dragImage, offsetX, offsetY);
在基于浏览器的 Flex 中,offsetX
应该offsetY
是负数(文档如是说,它工作正常)。但是,当在 AIR 中运行完全相同的代码时,您必须使偏移量为正。相同的数字,但为正数。这是非常非常奇怪的。
我已经测试了更多以及@maclema 的工作原理,但如果你在 AIR 中运行则不行。AIR中的拖放似乎有所不同。这真的很奇怪,因为不仅反馈没有正确显示,而且不可能不接受,而且坐标也完全关闭了。我只是在浏览器而不是 AIR 中尝试了我的应用程序,并且拖放完全被破坏了。
此外,跳过dragEnter
处理程序在 AIR 中工作正常,但在浏览器中运行时会破坏一切。