1.set listener
myDragEventListener mDragListener = new myDragEventListener();
imageView.setOnDragListener(mDragListener);
targetView.setOnDragListener(mDragListener);
imageView.setOnLongClickListener(new View.OnLongClickListener() {
@SuppressLint("NewApi")
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
ClipData dragData = new ClipData(
(CharSequence) v.getTag(),
new String[] {ClipDescription.MIMETYPE_TEXT_PLAIN},
item
);
View.DragShadowBuilder myShadow = new MyDragShadowBuilder(imageView);
v.startDrag(dragData, myShadow, null, 0);
return false;
}
});
2.DragShadowBuilder
public static class MyDragShadowBuilder extends DragShadowBuilder {
private static Drawable shadow;
private int width, height;
public MyDragShadowBuilder(View v) {
// TODO Auto-generated constructor stub
super(v);
shadow = new ColorDrawable(Color.LTGRAY);
}
@Override
public void onProvideShadowMetrics(Point size, Point touch) {
// TODO Auto-generated method stub
width = getView().getWidth();
height = getView().getHeight();
shadow.setBounds(0,0,width,height);
size.set(width, height);
touch.set(width / 2, height / 2);
}
@Override
public void onDrawShadow(Canvas canvas) {
// TODO Auto-generated method stub
super.onDrawShadow(canvas);
}
}
3.OnDragListener
protected class myDragEventListener implements View.OnDragListener {
@SuppressLint("NewApi")
@Override
public boolean onDrag(View v, DragEvent event) {
// TODO Auto-generated method stub
final int action = event.getAction();
switch(action) {
case DragEvent.ACTION_DRAG_STARTED:
if (event.getClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
((ImageView) v).setColorFilter(Color.BLUE);
v.invalidate();
return(true);
} else {
return(false);
}
//break;
case DragEvent.ACTION_DRAG_ENTERED:
((ImageView) v).setColorFilter(Color.GREEN);
v.invalidate();
return(true);
///break;
case DragEvent.ACTION_DRAG_EXITED:
((ImageView) v).setColorFilter(Color.YELLOW);
v.invalidate();
break;
case DragEvent.ACTION_DRAG_LOCATION:
return(true);
//break;
case DragEvent.ACTION_DROP:
ClipData.Item item = event.getClipData().getItemAt(0);
CharSequence dragData = item.getText();
((ImageView) v).clearColorFilter();
v.invalidate();
return(true);
//break;
case DragEvent.ACTION_DRAG_ENDED:
((ImageView) v).clearColorFilter();
v.invalidate();
return(true);
//break;
default:
Log.e("DragDrop Example","Unknown action type received by OnDragListener.");
break;
}
return false;
}
}