ドラッグアウトジェスチャをサポートするには、
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
に設定します。
|
|
|