支持拖出动作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。 |
|