Android-drag-and-drop
Android-ドラッグアンドドロップ
Androidのドラッグ/ドロップフレームワークを使用すると、ユーザーは、グラフィカルなドラッグアンドドロップジェスチャを使用して、現在のレイアウトのあるビューから別のビューにデータを移動できます。 API 11 現在、他のビューまたはビューグループへのビューのドラッグアンドドロップがサポートされています。フレームワークには、ドラッグアンドドロップ機能をサポートする次の3つの重要なコンポーネントが含まれています-
- イベントクラスをドラッグ。
- リスナーをドラッグ。
- ヘルパーメソッドとクラス。
ドラッグ/ドロッププロセス
ドラッグアンドドロッププロセスには基本的に4つのステップまたは状態があります-
- Started -このイベントは、レイアウト内のアイテムのドラッグを開始すると発生します。アプリケーションは、_startDrag()_メソッドを呼び出して、システムにドラッグの開始を指示します。 startDrag()メソッド内の引数は、ドラッグされるデータ、このデータのメタデータ、およびドラッグシャドウを描画するためのコールバックを提供します。 +システムは最初にアプリケーションにコールバックして、ドラッグシャドウを取得します。 次に、デバイスにドラッグシャドウを表示します。 +次に、システムは、現在のレイアウトのすべてのViewオブジェクトの登録済みドラッグイベントリスナーに、アクションタイプ_ACTION_DRAG_STARTED_のドラッグイベントを送信します。 +可能なドロップイベントを含むドラッグイベントの受信を継続するには、ドラッグイベントリスナーは true を返す必要があります。ドラッグイベントリスナーがfalseを返す場合、システムがドラッグイベントを送信するまで現在の操作のドラッグイベントを受信しませんアクションタイプがACTION_DRAG_ENDEDの場合。
- Continuing -ユーザーはドラッグを続けます。 システムは、ACTION_DRAG_ENTEREDアクションに続いてACTION_DRAG_LOCATIONアクションを、ドラッグポイントが入るビューの登録済みドラッグイベントリスナーに送信します。 リスナーは、イベントに応じてViewオブジェクトの外観を変更するか、Viewを強調表示して反応させることができます。 +ドラッグイベントリスナーは、ユーザーがビューの境界ボックスの外側にドラッグシャドウを移動した後、ACTION_DRAG_EXITEDアクションを受け取ります。
- ドロップ-ユーザーはビューの境界ボックス内でドラッグされたアイテムを離します。 システムは、ViewオブジェクトのリスナーにアクションタイプACTION_DROPのドラッグイベントを送信します。
- 終了-アクションタイプACTION_DROPの直後に、システムはアクションタイプACTION_DRAG_ENDEDのドラッグイベントを送信して、ドラッグ操作が終了したことを示します。
DragEventクラス
定数
以下は、DragEventクラスの一部として使用可能なすべての定数整数です。
Sr.No. | Constants & Description |
---|---|
1 |
ACTION_DRAG_STARTED ドラッグアンドドロップ操作の開始を通知します。 |
2 |
ACTION_DRAG_ENTERED ドラッグポイントがビューの境界ボックスに入ったことをビューに通知します。 |
3 |
ACTION_DRAG_LOCATION ドラッグシャドウがビューオブジェクトの境界ボックス内にある場合、ACTION_DRAG_ENTEREDの後にビューに送信されます。 |
4 |
ACTION_DRAG_EXITED ユーザーがビューの境界ボックスの外側にドラッグシャドウを移動したことを通知します。 |
5 |
ACTION_DROP ユーザーがドラッグシャドウをリリースしたことをビューに通知し、ドラッグポイントはビューの境界ボックス内にあります。 |
6 |
ACTION_DRAG_ENDED ドラッグアンドドロップ操作が完了したことをビューに通知します。 |
方法
以下は、DragEventクラスの一部として使用できる重要で最も頻繁に使用されるいくつかのメソッドです。
Sr.No. | Constants & Description |
---|---|
1 |
int getAction() このイベントのアクション値を調べます。 |
2 |
ClipData getClipData() startDrag()の呼び出しの一部としてシステムに送信されたClipDataオブジェクトを返します。 |
3 |
ClipDescription getClipDescription() ClipDataに含まれるClipDescriptionオブジェクトを返します。 |
4 |
boolean getResult() ドラッグアンドドロップ操作の結果の表示を返します。 |
5 |
float getX() ドラッグポイントのX座標を取得します。 |
6 |
float getY() ドラッグポイントのY座標を取得します。 |
7 |
String toString() このDragEventオブジェクトの文字列表現を返します。 |
ドラッグイベントのリッスン
レイアウト内のビューのいずれかがDragイベントに応答するようにする場合、ビューは View.OnDragListener またはsetup * onDragEvent(DragEvent)*コールバックメソッドを実装します。 システムがメソッドまたはリスナーを呼び出すと、上記のDragEventオブジェクトが渡されます。 Viewオブジェクトのリスナーとコールバックメソッドの両方を持つことができます。 この場合、システムはまずリスナーを呼び出し、リスナーがtrueを返す限りコールバックを定義します。
_onDragEvent(DragEvent)_メソッドと_View.OnDragListener_の組み合わせは、Androidの古いバージョンのタッチイベントで使用される* onTouchEvent()と *View.OnTouchListener の組み合わせに類似しています。
ドラッグイベントの開始
移動するデータの ClipData および ClipData.Item を作成することから始めます。 _ClipData_オブジェクトの一部として、ClipData内の ClipDescription オブジェクトに保存されているメタデータを提供します。 データの移動を表さないドラッグアンドドロップ操作の場合、実際のオブジェクトの代わりに null を使用できます。
次に、拡張 View.DragShadowBuilder を拡張して、ビューをドラッグするためのドラッグシャドウを作成するか、単に_View.DragShadowBuilder(View)_を使用して、渡されたビュー引数と同じサイズのデフォルトのドラッグシャドウを作成します。ドラッグシャドウの中心にタッチポイントがあります。
例
次の例は、* View.setOnLongClickListener()、View.setOnTouchListener()、および View.OnDragEventListener()*を使用した単純なドラッグアンドドロップの機能を示しています。
Step | Description |
---|---|
1 | You will use Android studio IDE to create an Android application and name it as My Application under a package com.example.saira_000.myapplication. |
2 | Modify src/MainActivity.java file and add the code to define event listeners as well as a call back methods for the logo image used in the example. |
3 | Copy image abc.png in res/drawable-* folders. You can use images with different resolution in case you want to provide them for different devices. |
4 | Modify layout XML file res/layout/activity_main.xml to define default view of the logo images. |
5 | Run the application to launch Android emulator and verify the result of the changes done in the application. |
以下は、変更されたメインアクティビティファイル src/MainActivity.java の内容です。 このファイルには、基本的な各ライフサイクルメソッドを含めることができます。
以下は res/layout/activity_main.xml ファイルの内容です-
'_次のコードで、abcはfinddevguides.comのロゴを示します_
以下は、2つの新しい定数を定義する res/values/strings.xml の内容です-
以下は、 AndroidManifest.xml のデフォルトのコンテンツです-
表示されたfinddevguidesロゴを長押しすると、ロゴの画像がその場所から1秒間長押しすると少し移動します。画像のドラッグを開始するタイミングです。 画面上でドラッグして、新しい場所にドロップできます。