2014-06-10 8 views
6

Im utilizzando view.startDrag() per avviare l'operazione di trascinamento. Durante il trascinamento, gli eventi vengono ricevuti in OnDragListener. Inoltre sto usando DragShadowBuilder per mostrare l'ultima immagine di View B durante il trascinamento.Come annullare View.OnDragListener in Android durante l'operazione di trascinamento?

C'è un modo per interrompere o annullare o interrompere il trascinamento da alcuni eventi o operazioni esterne? per esempio, ci sono 2 view, View A e View B, sto trascinando View B su View A. Durante il trascinamento, a causa di alcuni eventi o operazioni esterne, desidero annullare le operazioni di trascinamento o annullare OnDragListener (senza rimuovere il dito dallo view B).

Snippet di codice per 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); 

Snippet di codice per 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; 
    } 
} 

risposta

0

non ho potuto trovare qualche trucco per questo. Ho provato a inviare un evento di movimento di ACTION_UP e non ha fatto nulla. Finché il dito dell'utente viene tenuto premuto, non sembra che la gerarchia degli eventi venga interrotta. Non ho trovato nulla per aiutare con una ricerca su google.

Ho appena impostato un globale e ho aspettato fino al termine del trascinamento, quindi proceduto.

Problemi correlati