支援拖出手勢Adobe AIR 1.0 以及更新的版本 為了支援拖出手勢,您必須建立 Clipboard 物件以回應 mouseDown 事件,再將該物件傳送給 NativeDragManager.doDrag() 方法。接著,您的應用程式即可偵聽初始物件的 nativeDragComplete 事件,以決定一旦使用者完成或放棄手勢時要採取何種行動。 準備即將傳輸的資料為了準備所要拖曳的資料或物件,請建立 Clipboard 物件並在其中加入資訊 (包括一種或多種即將傳輸的格式)。使用標準資料格式便能傳遞任何可自動轉譯成原生剪貼簿格式的資料,使用應用程式定義的格式則可傳遞物件。 如果將資訊轉換成以特定格式傳輸較耗費運算資源,您可以提供執行轉換的處理常式函數名稱。唯有當接收端組件或應用程式讀取相關聯的格式時,才會呼叫該函數。 如需有關剪貼簿格式的詳細資訊,請參閱Clipboard 資料格式。 下列範例說明如何建立 Clipboard 物件以包含單一點陣圖的多種格式:Bitmap 物件、原生點陣圖格式,以及列有點陣圖載入來源檔案的檔案清單格式: 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。 |
|