我有一个自定义相对布局,我可以拖放一些 按钮。我开始拖动我的onTouch:删除或取消DragShadow
/**
*
*/
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN : {
ClipData data = ClipData.newPlainText("", "");
ImageButton imageButton = (ImageButton)view;
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(imageButton);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
} break;
case MotionEvent.ACTION_UP: {
view.performClick();
view.setVisibility(View.VISIBLE);
} break;
}
return true;
}
正如你所看到的我创建一个DragShadow。我现在有一个小问题,因为我定义了一个拖拽区域。当用户拖动按钮进行拖动区域的拖动被取消:
/**
*
*/
@Override
public boolean onDrag(View view, DragEvent event) {
View sourceView = (View) event.getLocalState();
float sourceX = sourceView.getX();
float sourceY = sourceView.getY();
float dropX = event.getX() - (sourceView.getWidth()/2);
float dropY = event.getY() - (sourceView.getHeight()/2);
switch(event.getAction()) {
case DragEvent.ACTION_DRAG_EXITED : {
TranslateAnimation animation = new TranslateAnimation(dropX - sourceX, 0, dropY - sourceY, 0);
animation.setDuration(300);
sourceView.startAnimation(animation);
sourceView.setX(sourceX);
sourceView.setY(sourceY);
sourceView.setVisibility(View.VISIBLE);
} break;
case DragEvent.ACTION_DROP : {
sourceView.setX(dropX);
sourceView.setY(dropY);
sourceView.setVisibility(View.VISIBLE);
TranslateAnimation animation = new TranslateAnimation(dropX - sourceX, 0, dropY - sourceY, 0);
animation.setDuration(300);
sourceView.startAnimation(animation);
sourceView.setX(sourceX);
sourceView.setY(sourceY);
} break;
}
return true;
}
}
因此,当用户离开该阻力区域的按钮被使用动画自动移回原来的位置。问题是DragShadow仍然可见,我找不到方法来删除或取消DragShadow。只要用户触摸屏幕,DragShadow就可见。
那么,如何在ACTION_DRAG_EXITED被触发时以编程方式取消或删除DragShadow?