支持拖出动作Adobe AIR 1.0 和更高版本 若要支持拖出动作,必须创建一个 Clipboard 对象来响应 mouseDown 事件,并将此对象发送给 NativeDragManager.doDrag() 方法。这样,应用程序就可以侦听启动对象上发生的 nativeDragComplete 事件,以决定在用户完成或放弃此动作时要采取何种动作。 准备要传输的数据若要准备要拖动的数据或对象,请创建一个 Clipboard 对象,然后以一种或多种格式添加要传输的信息。可以使用标准数据格式来传递可自动转换成本机剪贴板格式的数据,使用应用程序定义的格式来传递对象。 如果将要传输的信息转换为某种特定格式需要占用很大的计算开销,则可以提供用于执行这种转换的处理函数的名称。当且仅当接收组件或应用程序读取关联的格式时,才会调用此函数。 有关剪贴板格式的详细信息,请参阅剪贴板数据格式。 下面的示例说明如何创建包含一个采用多种格式(Bitmap 对象、本机位图格式,以及包含最初从中加载位图的文件的文件列表格式)的位图的 Clipboard 对象: import flash.desktop.Clipboard; import flash.display.Bitmap; import flash.filesystem.File; public function createClipboard(image:Bitmap, sourceFile:File):Clipboard{ var transfer:Clipboard = new Clipboard(); transfer.setData("CUSTOM_BITMAP", image, true); //Flash object by value and by reference transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false); transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false); return transfer; } 启动拖出操作若要启动拖动操作,请调用 NativeDragManager.doDrag() 方法来响应鼠标按下事件。doDrag() 方法是一个静态方法,它带有以下参数:
下面的示例说明如何对从文件加载的位图对象启动拖动操作。此示例加载一个图像,并在发生 mouseDown 事件时启动拖动操作。 package { import flash.desktop.NativeDragManager; import mx.core.UIComponent; import flash.display.Sprite; import flash.display.Loader; import flash.system.LoaderContext; import flash.net.URLRequest; import flash.geom.Point; import flash.desktop.Clipboard; import flash.display.Bitmap; import flash.filesystem.File; import flash.events.Event; import flash.events.MouseEvent; public class DragOutExample extends UIComponent Sprite { protected var fileURL:String = "app:/image.jpg"; protected var display:Bitmap; private function init():void { loadImage(); } private function onMouseDown(event:MouseEvent):void { var bitmapFile:File = new File(fileURL); var transferObject:Clipboard = createClipboard(display, bitmapFile); NativeDragManager.doDrag(this, transferObject, display.bitmapData, new Point(-mouseX,-mouseY)); } public function createClipboard(image:Bitmap, sourceFile:File):Clipboard { var transfer:Clipboard = new Clipboard(); transfer.setData("bitmap", image, true); // ActionScript 3 Bitmap object by value and by reference transfer.setData(ClipboardFormats.BITMAP_FORMAT, image.bitmapData, false); // Standard BitmapData format transfer.setData(ClipboardFormats.FILE_LIST_FORMAT, new Array(sourceFile), false); // Standard file list format return transfer; } private function loadImage():void { var url:URLRequest = new URLRequest(fileURL); var loader:Loader = new Loader(); loader.load(url,new LoaderContext()); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); } private function onLoadComplete(event:Event):void { display = event.target.loader.content; var flexWrapper:UIComponent = new UIComponent(); flexWrapper.addChild(event.target.loader.content); addChild(flexWrapper); flexWrapper.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); } } } 完成拖出传输当用户通过释放鼠标放置拖动的项目时,启动器对象会调度 nativeDragComplete 事件。您可以检查事件对象的 dropAction 属性,然后采取适当的动作。例如,如果动作是 NativeDragAction.MOVE,您可以将源项目从其原始位置删除。用户可以放弃拖动动作,方法是:当光标位于符合条件的放置目标外部时,释放鼠标按键。拖动管理器将已放弃的动作的 dropAction 属性设置为 NativeDragAction.NONE。 |
|