ドラッグアウトジェスチャのサポートAdobe AIR 1.0 およびそれ以降 ドラッグアウトジェスチャをサポートするには、mouseDown イベントに応じて Clipboard オブジェクトを作成し、その Clipboard オブジェクトを NativeDragManager.doDrag() メソッドに渡す必要があります。これにより、アプリケーションでドラッグ元オブジェクトの nativeDragComplete イベントをリッスンし、ユーザーがジェスチャを完了または破棄した場合に実行するアクションを決定できます。 データを移動するための準備データまたはオブジェクトをドラッグするための準備を行うには、Clipboard オブジェクトを作成し、移動する情報を 1 つ以上の形式で追加する必要があります。標準のデータ形式を使用すると、ネイティブなクリップボード形式に自動的に変換できるデータを渡すことができます。オブジェクトを渡すには、アプリケーション定義の形式を使用します。 移動する情報を特定の形式に変換するのに大量の計算が必要になる場合は、変換を実行するハンドラー関数の名前を指定できます。この関数は、ドロップ先のコンポーネントまたはアプリケーションが関連する形式を読み取る場合にのみ呼び出されます。 クリップボード形式について詳しくは、クリップボードのデータ形式を参照してください。 次の例は、複数の形式(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; } ドラッグアウト操作の開始ドラッグ操作を開始するには、mouseDown イベントに応じて 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 に設定します。 |
![]() |