Drag and drop on a shadowed target in android and then drag and drop back to its original position?… here is a solution to the problem.
Drag and drop on a shadowed target in android and then drag and drop back to its original position?
onDrag class:
private class ChoiceDragListener implements OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
no action necessary
break;
case DragEvent.ACTION_DRAG_ENTERED:
no action necessary
break;
case DragEvent.ACTION_DRAG_EXITED:
no action necessary
break;
case DragEvent.ACTION_DROP:
handle the dragged view being dropped over a drop view
View view = (View) event.getLocalState();
dropTarget = (RelativeLayout) v;
dropped = (RelativeLayout) view;
tagDropped = dropped.getTag().toString();
Log.i("tagDropped", "" + tagDropped);
tagDropTarget = dropTarget.getTag().toString();
Log.i("tagDropTarget", "" + tagDropTarget);
matchTag();
break;
case DragEvent.ACTION_DRAG_ENDED:
no action necessary
break;
default:
break;
}
return true;
}
}
ChoiceTouchListener class:
private final class ChoiceTouchListener implements OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
/*
* Drag details: we only need default behavior - clip data could
* be set to pass data as part of drag - shadow can be tailored
*/
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
view);
start dragging the item touched
view.startDrag(data, shadowBuilder, view, 0);
return true;
} else {
return false;
}
}
}
Now I want to move the object to the original position where it was dragged
I had such a search but did not answer anyonedrag and drop with onDraglistener animate to go back to original position if not dropped on target
Solution
Start by getting the distance between the dragger control and the drag receiver control:
TextView1
is a drag control
TextView2
is a drag receiver control
//if text view2 is below textview one and text view 2 is on the right of text view one
int topMargin=textview2_top_margin - textview1_top_margin
int leftMargin=textview2_left_margin - textview1_left_margin
public void animation() {
Animation animation = new TranslateAnimation(left_margin, 0, topMargin, 0);
animation.setDuration(1000);
controlToAnimate.startAnimation(animation);
}