Używam view.startDrag()
, aby rozpocząć operację przeciągania. Podczas przeciągania zdarzenia są odbierane w OnDragListener
. Również im przy użyciu DragShadowBuilder
, aby wyświetlić ostatni obraz View B
podczas przeciągania.Jak anulować View.OnDragListener w android podczas przeciągania operacji?
Czy istnieje sposób, aby zatrzymać lub anulować lub przerwać przeciąganie z niektórych zdarzeń zewnętrznych lub operacji? na przykład są 2 widoki, View A
i View B
, przeciągam View B
przez View A
. Podczas przeciągania, z powodu jakiegoś zewnętrznego zdarzenia lub operacji, chcę anulować operacje przeciągania lub anulować OnDragListener
(bez usuwania palca z view B
).
fragment kodu dla DragShadowBuilder
:
DragShadowBuilder shadowBuilder = new DragShadowBuilder(view) {
@Override
public void onDrawShadow(Canvas canvas) {
canvas.drawBitmap(b, 0, 0, new Paint());
super.onDrawShadow(canvas);
}
};
boolean dragSuccess = false;
dragSuccess = view.startDrag(null, shadowBuilder, view, 0);
fragment kodu dla OnDragListener
:
private final class ViewDragListener implements OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
int action = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
log("ACTION_DRAG_STARTED");
break;
case DragEvent.ACTION_DRAG_ENTERED:
log("ACTION_DRAG_ENTERED");
break;
case DragEvent.ACTION_DRAG_EXITED:
log("ACTION_DRAG_EXITED");
case DragEvent.ACTION_DROP:
log("ACTION_DROP");
mX = (int) event.getX();
mY = (int)event.getY();
break;
case DragEvent.ACTION_DRAG_ENDED:
log("ACTION_DRAG_ENDED");
//Doing some cleanup operations.
break;
case DragEvent.ACTION_DRAG_LOCATION:
log("ACTION_DRAG_LOCATION");
break;
default:
break;
}
return true;
}
}