2014-06-20 12 views
9

Próbowałem zaimplementować kod z tego pytania: Detecting a long press with Android, ale zawsze wykrywa długie naciśnięcie, nawet jeśli po prostu dotknę go. Mój kod wygląda następująco (I przedłużony ImageView, bo więcej jest w nim kod, nie ma znaczenia dla tego pytania):Długie naciśnięcie w GestureDetector również uruchamia się z kranu

public class EbsImageView extends ImageView { 
    final GestureDetector gestureDetector = new GestureDetector(this.getContext(), new GestureDetector.SimpleOnGestureListener() { 
     public void onLongPress(MotionEvent e) { 
      Log.e("", "Longpress detected"); 
     } 
    public boolean onSingleTapUP(MotionEvent e) { 
     Log.e("", "Press detected"); 

      // don't consume, we want the long press to fire if it was a 
      // long press 
     return false; 
     } 
    }); 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 
} 
+0

return false z onTouchEvent() –

+0

@ Eu.Dr. nie ma znaczenia, próbowałem również kod z: http://developer.android.com/training/gestures/detector.html, ale ten sam problem. –

+0

gdzie jest Twoja adnotacja @Override na onLongPress i onSingleTapUp? To tylko niepowodzenie kopiowania/wklejania? – Opiatefuchs

Odpowiedz

0

Jak wspomina w swoim komentarzu, należy rozróżnić onSingleTapUp() i onSingleTapUP(). Używanie adnotacji Zastępuj to dobra praktyka.

Jestem nieco zdezorientowany, ponieważ tytuł pytania wydaje się wskazywać, że długie naciśnięcie uruchamia również zdarzenie on tap, podczas gdy tekst twojego pytania mówi to na odwrót. Oznacza to, że kran wywołuje długie wydarzenie prasowe. Jeśli jest to późniejsze, spróbuj zwrócić wartość true z Twojego onSingleTapUp(). Działa to dla mnie przy użyciu pomocy: : Mam nadzieję, że to pomaga.

13

Musisz zastąpić onDown i ustawić jako return true. Poniższy kod pracował dla mnie:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDown(MotionEvent event) { 
     // triggers first for both single tap and long press 
     return true; 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
     // triggers after onDown only for single tap 
     return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent event) { 
     // triggers after onDown only for long press 
     super.onLongPress(event); 
    } 
} 
Powiązane problemy