2016-08-15 3 views
0

私のAndroidプログラムでは、リニアーレイアウトでイメージビューをある位置から別の位置に移動したいと考えています。画像ビューはドラッグされていますが、ある位置に配置すると、開始位置に戻ります。私に何ができる?グーグルでは大声で話しましたが、解決策は得られませんでした。Androidドラッグアンドドロップ - 画像がドラッグされない

マイOnTouch:

img.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       ClipData data = ClipData.newPlainText("", ""); 
       View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(img); 

       img.startDrag(data, shadowBuilder, img, 0); 
       img.setVisibility(View.INVISIBLE); 
       return true; 
      } else { 
       return false; 
      } 
     } 
    }); 

マイOnDrag:

linearLayout.setOnDragListener(new View.OnDragListener() { 
     @Override 
     public boolean onDrag(View v, DragEvent event) { 
      switch (event.getAction()) { 
       case DragEvent.ACTION_DROP: 
        View view = (View) event.getLocalState(); 
        ViewGroup owner = (ViewGroup) view.getParent(); 
        owner.removeView(view); 
        LinearLayout container = (LinearLayout) v; 
        container.addView(view); 
        view.setVisibility(View.VISIBLE); 
        Log.d(msg, "ACTION_DROP event"); 
        break; 
       default: 
        break; 
      } 
      return true; 
     } 
    }); 

答えて

0

私はそのはすでにandroid drag and drop ImageView onTouchListenerに答えたと思います。

私はあなたがジンジャーブレッドをサポートする必要がある場合はあなただけの上にゼリーBeanをサポートする必要がある場合にも

あなたがここに私の例で

https://github.com/NAYOSO/android-dragview

を見てみることができ、ここで自分のコンテンツを貼り付けていますあなたはこの記事から

http://developer.android.com/guide/topics/ui/drag-drop.html

をそれを見ることができますアンドロイドのライブラリからドラッグ&ドロップを使用することができます

ドラッグ&ドロップビューについての最初の説明では、タッチリスナーを作成してstartDragを呼び出してドラングを開始する必要があります。それと同じくらい簡単です。

民間最終クラスdragTouchListenerは、あなたがonDragListener使用できる場所を落とすのターゲットを監視するにはOnTouchListener {

@Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); 
      v.startDrag(data, shadowBuilder, v, 0); 
      return true; 
     } else { 
      return false; 
     } 
    } 

} 

を実装

プライベートクラスdropListenerはあなたのようOnDragListener {

View draggedView; 
CustomTextView dropped; 

@Override 
public boolean onDrag(View v, DragEvent event) { 
    switch (event.getAction()) { 
    case DragEvent.ACTION_DRAG_STARTED: 
     draggedView = (View) event.getLocalState(); 
     dropped = (CustomTextView) draggedView; 
     draggedView.setVisibility(View.INVISIBLE); 
     break; 
    case DragEvent.ACTION_DRAG_ENTERED: 
     break; 
    case DragEvent.ACTION_DRAG_EXITED: 
     break; 
    case DragEvent.ACTION_DROP: 

     CustomTextView dropTarget = (CustomTextView) v; 
     dropTarget.setText(dropped.getText().toString()); 
     break; 
    case DragEvent.ACTION_DRAG_ENDED: 
     break; 
    default: 
     break; 
    } 
    return true; 
} 

} 実装私のコードから見ることができますが、多くのイベントがありますが、主なものは、ビューがドラグを開始するときですgged、落として終了しました。

tvDrag.setOnTouchListener(new dragTouchListener()); 
tvDrop.setOnDragListener(new dropListener()) 
を表示するためにリスナーを設定することを忘れないでください
関連する問題