2016-08-15 107 views
0

在我的Android程序中,我想將我的圖像視圖從一個位置移動到另一個位於線性佈局中。 imageview正在被拖動,但是當我放置在某個位置時,它將返回到起始位置本身。我能做什麼? Google搜索了很多,但沒有得到解決方案。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回答。

我在這裏貼上自己的內容以及

如果您需要支持薑餅你可以在我的例子來看看這裏

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

,如果你只需要支持你上面果凍豆可以使用Android庫中的拖放功能,你可以從這篇文章中看到它

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

有關拖放視圖的一些說明,首先您需要創建觸摸偵聽器,然後調用startDrag以開始拖動。就如此容易。

私人final類dragTouchListener實現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; 
     } 
    } 

} 

監察下降到位的目標,你可以使用onDragListener

私有類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; 
} 

} 正如你從我的代碼中可以看到有很多事件,但主要的是當視圖開始被拖動時積壓,掉落並結束。

不要忘記設置監聽器來查看

tvDrag.setOnTouchListener(new dragTouchListener()); 
tvDrop.setOnDragListener(new dropListener())