典型问题:
当我们在Flex application里用drag and drop时,有一些默认的effects会加给所有的drag and drop操作。比如,如果drag不成功,那么drag proxy files会返回到drag initiator。 但是为什么用同样的代码在AIR 里运行就不会有这些effects。这是因为AIR里,即使指定使用DragManager, drag and drop内部还是会去使用NativeDragManager。
有什么方法可以在不变换代码的情况下,让run as a AIR application和run as a Flex application有同样的effects呢? 因为我们还要求要支持OS 和AIR app之间的拖拽,所以如果完全强制关掉NativeDragManager 去用DragManager 去做所有的拖拽操作,这也是行不通的?
那么我们应该怎么办呢?
解决方案:
在AIR app外,drops是无法获得这些effects的。所以我想最简单一种方法是,我们可以做一个假的proxy image 模拟drag 这个动作,当drag不成功的时候,让这个image飞回到我们窗口里开始拖的那个地方。对程序内部的drops来说,我们可以做的更好一点,因为你可以通过 native drag 的event来知道具体的drop 发生在哪里?所以可以重载 Flex drag manager implementation这个类。那么我们是不是也需要重载 Flex SDK的NativeDragManagerImpl 和IDragManager,怎么去做呢?
如果我们想去重载已经存在的NativeDragManagerImpl,那么我们先需要去preloader里注册它(一旦一个drag manager 被注册后,你就不能再去重载它,所以唯一的去避免默认使用drag manager的办法就是在preloader里先注册,因为它是在你程序initializes之前就运行的)
如下我们做的一个例子,
package hacks
{
import mx.preloaders.DownloadProgressBar;
public class Preloader extends mx.preloaders.DownloadProgressBar
{
import mx.core.Singleton;
import mx.core.WindowedApplication;
import mx.managers.DragManager;
public function Preloader()
{
import hacks.NativeDragManagerImpl;
var placeholder:NativeDragManagerImpl;
Singleton.registerClass("mx.managers::IDragManager", hacks.NativeDragManagerImpl);
DragManager.isDragging;
super();
}
}
}
虽然这样可以运行,但是我们建议你最好不要用同一个code去同时run as AIR app和Flex app,尽量避免重载 NativeDragManagerImpl,因为这个class在很多不同的版本里会有轻微的变化,所以如果你这次修改了它,那么当你使用下一个版本的时候,你还需要再做一遍同样的改动,很麻烦。
--米酒
分享到:
相关推荐
"Java中的Drag and Drop拖拽技术" Java中的Drag and Drop拖拽技术是指在Java应用程序中,实现拖拽操作的技术。Drag and Drop技术可以将数据从一个组件拖拽到另一个组件中,实现数据的传输和交互操作。 Drag and ...
Ole Drag and Drop Example.
drag and drop 拖放库 vue dnd mobile
Drag and Drop Component Suite Version 5.2 Full Source
jquery实现Drag and Drop,图片拖拽实例
DragAndDrop_Demo源码,是一个很不错的C++源码,有兴趣的伙伴们抽时间可以看一下把。
DragAndDrop_src源码,是一个很不错的C++源码,有兴趣的伙伴们抽时间可以看一下把。
表格拖拽排序插件 Table Drag and Drop JQuery plugin v0.7 最新0.7版本
最近写项目的时候,要用到一个拖拽效果,但是,所以写了一个例子上传到这里,交流学习
wpf,实现了鼠标拖放操作,可以像win7桌面的图标一样拖放
iOS11 Drag and Drop功能的简单演示 github: https://github.com/xiaopin/iOS11-Drag-and-Drop.git
C#实现和windows资源管理器之间相互拖拽文件,并显示文件图标的列子。可以访问blog:http://blog.csdn.net/cc_net查看有关Drag和Drop的文章
实现datagrid and treeviewer的drag drop, 只可单向drag
用网上XE7修改的,可用。包含了dclDragDropDXE10.bpl和DragDropDXE10.bpl
Right Button Drag and Drop with Popup Menu(5KB)
一套简化拖放操作的组件包,虽然很老了,不过也支持D7。
一篇关于文件拖放扩展的宝贵资料,介绍了IE中文件拖放的整个过程
flutter_list_drag_and_drop,列表的拖放实现,博客附件,效果请查看博客相对应项目。
Drag and Drop Component Suite Full Source
Sliverlight 微软Drag and drop 实例,希望能够给大家有所帮助