2014-06-10 23 views
6

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; 
    } 
} 

Odpowiedz

0

nie mogłem znaleźć żadnej sztuczki dla tego. Próbowałem wysłać zdarzenie motion ACTION_UP i nic nie zrobił. Tak długo, jak palec użytkownika jest przytrzymywany, wydaje się, że nie ma zakłóceń w hierarchii zdarzeń. Nie znalazłem nic, co mogłoby pomóc w wyszukiwaniu w Google.

Po prostu ustawiłem globalnie i czekałem aż przeciągnięcie się zakończy, a następnie kontynuuję.