2016-04-12 45 views
7

コンテナや食料品袋のように動作するリスナーを含むビューを作成したいと考えています。ドラッグされたイメージやテキストは、収集されてローカルデータベースに保存されます。むしろイメージ名や文字列が保存されます。カスタムビューを作成してからデータのカスタム行を表示するようにしましたが、「食料品袋」タイプのビューを作成する方法がわかりません。リスナーでカスタムコンテナビューを作成するためにGoogleを検索しましたが、探しているものに関連するものは見つかりませんでした。私は誰も私のためにそれをするように求めていない、ちょうど私にいくつかのアドバイスを与えるか、正しい方向に押してください。Androidでカスタムコンテナビューを作成するにはどうすればよいですか?

編集 もう少し明確にするために私はすでにビューをドラッグアンドドロップする方法を知っています。その問題はどこにでも落とせるということです。私が望むのは、何かがその境界内に落とされたときに、ビューの文字列またはタグを取得するビューです。どのような視点であろうと、どういうわけか、このカスタムビューは、その境界内でどのような種類のビューがドロップされたのかを知り、ドロップ時にそのビューを削除する必要があります。

+0

_Trying:ここでは、各項目に追加することができ、リスナーの例です(LHS&RHS)が LHSは卵、ケーキのようないくつかの項目を(持っていますRHSにBAG(ショッピングバッグ)があります LHSからRHSに卵をドラッグ&ドロップすると、その商品は請求書(ローカルDB)に追加されます 正しいですか? ? – Pawan

+0

あなたはどのAPIレベルをカバーしていますか? 、つまりMinSDKLevelに対する期待は?あなたはこれを読みたいとそれをやって、あなたの問題に再びここに来るよう – Pawan

+0

が見える:http://developer.android.com/intl/es/guide/topics/ui/drag-drop.html – Nanoc

答えて

1
<view class="at.calista.quatscha.views.SwipebarLayout" 
     android:id="@+id/sbl" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <!-- Top View --> 
     <Button android:text="Top" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

     <!-- Bottom View --> 
     <Button android:text="Bottom" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

+0

もhttp://developer.android.com/reference/android/view/ViewGroup.html –

+0

を参照してくださいこれは私の質問に答えません。この例は、スワイプ可能なレイアウトのツールバーまたはタブレイアウトに似ています。 「コンテナ」タイプのビューの例は示していません。ありがとう、結構です。 –

1

次の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; 
    } 
}); 
関連する問題