2013-07-03 29 views
6

我想實現一個拖放android的例子。長時間按下某個項目後,我將其拖動到目標級別並放在那裏。某種方式我成功了。但我想要一些不同的東西。我做了這樣的事情.. enter image description here如何將項目從列表視圖拖放到外部textView上?

但我想所有項目添加到ListView和我將在以後的ListView長按PIC了一個項目,那麼我將這個項目拖到我的目標水平下降它在那裏。我想是這樣的.. enter image description here

我的代碼如下......

public class MainActivity extends Activity { 



@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 






    findViewById(R.id.mango).setOnLongClickListener(longListen); 
    findViewById(R.id.orange).setOnLongClickListener(longListen); 
    findViewById(R.id.apple).setOnLongClickListener(longListen); 
    findViewById(R.id.banana).setOnLongClickListener(longListen); 

    findViewById(R.id.drop_here).setOnDragListener(DropListener); 

    listview.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 
       int pos, long id) { 
      // TODO Auto-generated method stub 

      Log.i("long clicked","pos"+" "+pos); 

      return true; 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

OnLongClickListener longListen = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     DragShadow dragShadow = new DragShadow(v); 

     ClipData data = ClipData.newPlainText("", ""); 

     v.startDrag(data, dragShadow, v, 0); 

     return false; 
    } 
}; 

private class DragShadow extends View.DragShadowBuilder { 

    ColorDrawable greyBox; 

    public DragShadow(View view) { 
     super(view); 
     // TODO Auto-generated constructor stub 
     greyBox = new ColorDrawable(Color.LTGRAY); 
    } 

    @Override 
    public void onDrawShadow(Canvas canvas) { 
     // TODO Auto-generated method stub 
     // super.onDrawShadow(canvas); 

     greyBox.draw(canvas); 
    } 

    @Override 
    public void onProvideShadowMetrics(Point shadowSize, 
      Point shadowTouchPoint) { 
     // TODO Auto-generated method stub 
     // super.onProvideShadowMetrics(shadowSize, shadowTouchPoint); 
     View v = getView(); 

     int height = (int) v.getHeight()/2; 
     int width = (int) v.getWidth()/2; 

     greyBox.setBounds(0, 0, width, height); 
     shadowSize.set(width, height); 

     shadowTouchPoint.set(width/2, height/2); 

    } 


} 

OnDragListener DropListener = new View.OnDragListener() { 

    @Override 
    public boolean onDrag(View v, DragEvent event) { 
     // TODO Auto-generated method stub 

     int dragEvent = event.getAction(); 

     switch (dragEvent) { 
     case DragEvent.ACTION_DRAG_ENTERED: 
      Log.i("Drag ", "Entered"); 
      break; 
     case DragEvent.ACTION_DRAG_EXITED: 
      Log.i("Drag ", "Exit"); 
      break; 
     case DragEvent.ACTION_DROP: 
      Log.i("Drag ", "Drop"); 

      TextView target = (TextView) v; 
      TextView dragg = (TextView) event.getLocalState(); 
      target.setText(dragg.getText()); 
      break; 
     default: 
      break; 
     } 

     return true; 
    } 
}; 

} 

我已經嘗試了一些教程,但我無法從那裏得到的解決方案。 Android List View Drag and Drop sort

+0

它會在目標上做什麼?我的意思是,它是從它的地方被刪除?它會轉換爲TEXT?! – MAST3RMIND

+0

目標將顯示我拖動的項目?基本上我想將這個代碼添加到我的另一個項目。將會添加一些其他功能主義者。如果我得到這個解決方案,那麼我的其他要求將得到滿足。 – TKumar

回答

7

我找到了解決方案。很簡單,只需在setOnItemClickListener中調用startDrag方法即可。

listview.setOnItemLongClickListener(new OnItemLongClickListener() { 

     public boolean onItemLongClick(AdapterView<?> arg0, View v, 
       int pos, long id) { 
      // TODO Auto-generated method stub 


      v.startDrag(data, dragShadow, v, 0); 
      return true; 
     } 
    }); 
+6

你可以發表你的整個代碼拖ñ列表項目? –

0

這裏有一個很好的教程http://www.vogella.com/articles/AndroidDragAndDrop/article.html 通過Lars Vogel。但它只能從Android 4及更高版本(在ICS之後)上運行。

如果那不給你解決嘗試添加一個簡單的onTouchListener拖動對象,看看對象,而要拖到(在你的情況下,一個TextView)

查看的範圍內拖動瀑布一個簡單的拖動ontouchlistener實現可以在這裏找到:https://stackoverflow.com/a/9398861/2138983

相關問題