AIR でのドラッグ&ドロップの基礎

Adobe AIR 1.0 およびそれ以降

AIR アプリケーションでのドラッグ&ドロップの使用に関する簡単な説明およびコード例については、Adobe Developer Connection で次のクイックスタートの記事を参照してください。

ドラッグ&ドロップ API には、次のクラスが含まれます。

パッケージ

クラス

flash.desktop

ドラッグ&ドロップ API で使用する定数は、次のクラスで定義されます。

flash.events

NativeDragEvent

ドラッグ&ドロップジェスチャのステージ

ドラッグ&ドロップジェスチャには、次の 3 つのステージがあります。

開始
ユーザーは、マウスボタンを押しながらコンポーネントからドラッグするか、またはコンポーネント内のアイテムをドラッグすることで、ドラッグ&ドロップ操作を開始します。 アイテムのドラッグ元のコンポーネントは、通常はドラッグイニシエータとして設計されており、 nativeDragStart イベントと nativeDragComplete イベントを送出します。Adobe AIR アプリケーションは、 NativeDragManager.doDrag() メソッドを mouseDown イベントまたは mouseMove イベントに応じて呼び出してドラッグ操作を開始します。

ドラッグ操作が AIR アプリケーションの外で開始された場合、 nativeDragStart イベントまたは nativeDragComplete イベントを送出するイニシエータオブジェクトはありません。

ドラッグ
ユーザーは、マウスボタンを押しながら、マウスカーソルを他のコンポーネントやアプリケーション、またはデスクトップへ移動します。 ドラッグが行われている間、イニシエータオブジェクトによって nativeDragUpdate イベントが送出されます(ただし、このイベントは Linux の AIR には送出されません)。ユーザーが AIR アプリケーション内のドロップ可能なドロップターゲットの上にマウスを移動すると、そのドロップターゲットによって nativeDragEnter イベントが送出されます。イベントハンドラーでは、イベントオブジェクトを調べて、ドラッグされたデータの形式がターゲットに受け入れられるかどうかを確認できます。受け入れられる場合は、 NativeDragManager.acceptDragDrop() メソッドを呼び出して、ユーザーがデータをターゲット上にドロップできるようにします。

ドラッグジェスチャがインタラクティブオブジェクトの上にある間、そのオブジェクトによって nativeDragOver イベントが送出されます。ドラッグジェスチャがインタラクティブオブジェクトから離れると、そのオブジェクトによって nativeDragExit イベントが送出されます。

ドロップ
ユーザーは、対象となるドロップターゲットの上でマウスを放します。 ターゲットが AIR アプリケーションまたはコンポーネントである場合、そのターゲットオブジェクトによって nativeDragDrop イベントが送出されます。イベントハンドラーでは、移動されたデータにイベントオブジェクトからアクセスできます。ターゲットが AIR の外部にある場合は、オペレーティングシステムまたは他のアプリケーションによってドロップが処理されます。どちらの場合も、ドラッグ元のオブジェクトによって nativeDragComplete イベントが送出されます(AIR 内からドラッグが開始された場合)。

NativeDragManager クラスは、ドラッグインジェスチャとドラッグアウトジェスチャの両方を制御します。NativeDragManager クラスのメンバはすべて静的であるため、このクラスのインスタンスは作成しないでください。

Clipboard オブジェクト

アプリケーションやコンポーネントの内部または外部へドラッグされたデータは、Clipboard オブジェクトに格納されます。1 つの Clipboard オブジェクトを使用すると、同じ情報を様々な形式で表現することができます。これにより、他のアプリケーションがデータを解釈および使用できる可能性が高まります。例えば、イメージをイメージデータ、直列化された Bitmap オブジェクト、ファイルとして含めることができます。ある形式でのデータのレンダリングを、データの読み取り後に呼び出されるレンダリング関数に任せることができます。

ドラッグジェスチャの開始後は、 nativeDragEnter イベント、 nativeDragOver イベント、および nativeDragDrop イベントのイベントハンドラー内からのみ Clipboard オブジェクトにアクセスできます。ドラッグジェスチャの終了後に、Clipboard オブジェクトの読み取りや再使用を行うことはできません。

アプリケーションオブジェクトは、参照および直列化されたオブジェクトとして移動できます。参照は、転送元アプリケーション内でのみ有効です。直列化されたオブジェクトは AIR アプリケーション間で有効ですが、直列化および直列化解除しても有効なオブジェクトについてのみ使用できます。直列化されたオブジェクトは、ストリングベースのデータ移動形式である Action Message Format for ActionScript 3 (AMF3)に変換されます。

Flex フレームワークの操作

Flex アプリケーションを作成する場合は、一般に Adobe® Flex™ のドラッグ&ドロップ API を使用するほうが便利です。AIR で Flex アプリケーションを実行する場合(AIR NativeDragManager が内部で使用されます)、Flex フレームワークでは、AIR のドラッグ&ドロップ API と同等の機能セットが提供されます。また、制限の多いブラウザー環境でアプリケーションまたはコンポーネントを実行する場合に使用できる、より限定的な機能セットも用意されています。AIR クラスは、AIR ランタイム環境の外部で実行されるコンポーネントまたはアプリケーションでは使用できません。