ドラッグアウトジェスチャのサポート

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() メソッドは、次のパラメーターを受け取る静的メソッドです。

パラメーター

説明

initiator

ドラッグ元のオブジェクトです。このオブジェクトは、 dragStart イベントと dragComplete イベントを送出します。イニシエータはインタラクティブオブジェクトである必要があります。

clipboard

移動されるデータを含む Clipboard オブジェクトです。Clipboard オブジェクトは、ドラッグ&ドロップシーケンスの実行中に送出された NativeDragEvent オブジェクトで参照されます。

dragImage

(オプション)ドラッグ中に表示される BitmapData オブジェクトです。このイメージには、 alpha 値を指定できます。(注意:Microsoft Windows では、常に一定のアルファフェードがドラッグ画像に適用されます)。

offset

(オプション)ドラッグ画像とマウスのホットスポットとのオフセットを指定する Point オブジェクトです。マウスカーソルの左上にドラッグ画像を移動するには、負の座標を使用します。オフセットを指定しない場合、ドラッグ画像の左上隅がマウスのホットスポットの位置に配置されます。

actionsAllowed

(オプション)ドラッグ操作の有効なアクション(コピー、移動、またはリンク)を指定する NativeDragOptions オブジェクトです。引数を指定しない場合、すべてのアクションが許可されます。DragOptions オブジェクトは、NativeDragEvent オブジェクトで参照されます。これにより、許可されたアクションがターゲットコンポーネントの目的に適合しているかどうかを、可能性があるドラッグターゲットでチェックできます。例えば、「ごみ箱」コンポーネントでは、移動アクションを許可するドラッグジェスチャしか受け入れられない場合があります。

次の例は、ファイルから読み込んだビットマップオブジェクトのドラッグ操作を開始する方法を示しています。この例では、イメージを読み込み、 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 に設定します。