AIR 中拖放的基础知识

Adobe AIR 1.0 和更高版本

有关在 AIR 应用程序中使用拖放操作的快速介绍和代码示例,请参阅 Adobe Developer Connection 中的以下快速入门文章:

拖放 API 包含以下类。

拖放手势包含的阶段

拖放手势分成以下三个阶段:

启动
用户通过按住鼠标按键从组件或组件中的项目进行拖动,启动拖放操作。 作为被拖动项目的来源的组件通常称为拖动启动器,它会调度 nativeDragStart nativeDragComplete 事件。Adobe AIR 应用程序通过调用 NativeDragManager.doDrag() 方法响应 mouseDown mouseMove 事件,来启动拖动操作。

如果从 AIR 应用程序之外启动拖动操作,则没有启动器对象会调度 nativeDragStart nativeDragComplete 事件。

拖动
用户在按住鼠标按键的同时,将鼠标光标移至其他组件、应用程序,或移至桌面。 只要拖动操作仍在进行,启动器对象就会调度 nativeDragUpdate 事件。(但是,对于 Linux,则不会在 AIR 中调度此事件。)当用户将鼠标移至 AIR 应用程序中可能的放置目标上方时,此放置目标会调度 nativeDragEnter 事件。事件处理函数会检查此事件对象,以确定所拖动的数据是否是以此目标接受的格式提供的,如果是,则会通过调用 NativeDragManager.acceptDragDrop() 方法允许用户将数据放在此目标上。

只要拖动手势仍在交互式对象上方,此对象就会调度 nativeDragOver 事件。当拖动手势离开此交互式对象时,此对象会调度 nativeDragExit 事件。

放置
用户在符合条件的放置目标上释放鼠标。 如果目标是 AIR 应用程序或组件,则目标对象会调度 nativeDragDrop 事件。 事件处理函数可以从事件对象访问所传输的数据。如果此目标在 AIR 外部,则由操作系统或其他应用程序来处理放置操作。在上述两种情况下,启动对象都会调度 nativeDragComplete 事件(如果拖动是从 AIR 内部启动的)。

NativeDragManager 类既控制拖入手势,也控制拖出手势。NativeDragManager 类的所有成员均为静态成员,所以请勿创建此类的实例。

Clipboard 对象

拖入或拖出应用程序或组件的数据包含在 Clipboard 对象中。单个 Clipboard 对象可以提供相同信息的不同表示形式,以便增加其他应用程序能够理解和使用这些数据的可能性。例如,图像可以以图像数据形式、序列化的 Bitmap 对象形式和文件形式包含在其中。以某种格式呈现这些数据的操作可以由到读取这些数据时才调用的呈现函数来处理。

启动拖动手势后,只能从 nativeDragEnter nativeDragOver nativeDragDrop 事件的事件处理函数内访问 Clipboard 对象。拖动手势终止后,便无法读取和重用 Clipboard 对象。

应用程序对象可以作为引用和序列化对象进行传输。引用只在源应用程序中有效。在 AIR 应用程序之间是可以进行序列化对象传输的,但是,只能对在进行序列化和反序列化后仍然有效的对象进行这种传输。经过序列化的对象将转换成 ActionScript 3 的 Action Message Format (AMF3),这是一种基于字符串的数据传输格式。

使用 Flex 框架

大多数情况下,在构建 Flex 应用程序时最好使用 Adobe® Flex™ 拖放 API。在 AIR 中运行 Flex 应用程序时,Flex 框架提供同等的功能集(它在内部使用 AIR NativeDragManager)。当应用程序或组件在限制性更强的浏览器环境中运行时,Flex 也会保留一个更有限的功能集。在 AIR 运行时环境外部运行的组件或应用程序中,不能使用 AIR 类。