次の2つのビューが重なるかどうかを決定する方法が必要になります。例えば、これらの方法のようなものがターゲットビューとドラッグしたアイテムビューが同じコンテナビューで、2つの異なるビューのときのために働くことができます:
private Rect getScreenBounds(View view)
{
int[] location = new int[2];
view.getLocationOnScreen(location);
return new Rect(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight());
}
private boolean doViewsIntersect(View dropTarget, View item)
{
Rect dropRect = getScreenBounds(dropTarget);
Rect itemRect = getScreenBounds(item);
return Rect.intersects(dropRect, itemRect);
}
ビューがドラッグされている場合は、コンテナの子ビューがあり、そのコンテナにドロップロジックを実行する特別なヒットエリアがある場合、ヒットエリアのRect
を交差テストに使用することができます。 View
についての情報を保存するには
、あなたはいくつかのオプションがあります:あなたは、各項目にたいな情報を格納するためにview.setTag(key, object)
とview.getTag(key)
を使用することができます
- を。
- アイテムにカスタムクラスを使用している場合は、ビュークラスからデータを取得するメソッドを追加するだけです。
- アイテムに複数の異なるクラスを使用している場合は、インタフェースを作成し、そのインタフェースを各ドラッグ可能なビュー・クラスに実装できます。アイテムのリリースで
、あなたはその後、エリア/景色が交差するかどうかを確認することができ、そして彼らが行う場合は、必要に応じて処理するために、ドラッグしたアイテムから必要な情報を取得するには、いずれかgetTag
を使用したりする方法が追加ビュー。
たとえば、これはイベントを受け取ったときにonTouchListener
でトリガーされます。 2部で 分割画面as_あなたの条件を理解することが
item.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (event.getActionMasked() == MotionEvent.ACTION_UP)
{
if (doViewsIntesect(dropTarget, v))
{
Object data = v.getTag(DATA_KEY);
//process data
((ViewGroup) v.getParent()).removeView(v); // to remove the item afterwards
}
}
return false;
}
});
_Trying:ここでは、各項目に追加することができ、リスナーの例です(LHS&RHS)が LHSは卵、ケーキのようないくつかの項目を(持っていますRHSにBAG(ショッピングバッグ)があります LHSからRHSに卵をドラッグ&ドロップすると、その商品は請求書(ローカルDB)に追加されます 正しいですか? ? – Pawan
あなたはどのAPIレベルをカバーしていますか? 、つまりMinSDKLevelに対する期待は?あなたはこれを読みたいとそれをやって、あなたの問題に再びここに来るよう – Pawan
が見える:http://developer.android.com/intl/es/guide/topics/ui/drag-drop.html – Nanoc