2014-06-20 13 views
9

Ho provato a implementare il codice da questa domanda: Detecting a long press with Android, ma rileva sempre una pressione prolungata, se anche solo lo tocco. Il mio codice è il seguente (ho esteso ImageView, perché più il codice è in esso, non rilevante per questa domanda):La pressione prolungata in GestureDetector si attiva anche a rubinetto

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 from onTouchEvent() –

+0

@ Eu.Dr. non fa alcuna differenza, ho anche provato il codice da qui: http://developer.android.com/training/gestures/detector.html ma lo stesso problema. –

+0

dov'è l'annotazione @Override su onLongPress e onSingleTapUp? È solo un errore di copia/incolla? – Opiatefuchs

risposta

0

Come ho detto nel mio commento, si deve distinguere tra onSingleTapUp() e onSingleTapUP(). L'uso dell'annotazione Override è una buona pratica.

Sono un po 'confuso perché il titolo della tua domanda sembra indicare che una lunga pressione spara anche l'evento alla spina, mentre il testo della tua domanda lo dice al contrario. Quello è che un colpetto spara un evento di lunga durata. Se il più tardi è il caso, prova a restituire true dal tuo onSingleTapUp(). Questo funziona per me utilizzando il SimpleGestureListener:

class SimpleGestureListener extends GestureDetector.SimpleOnGestureListener { 

    @Override 
    public boolean onDown(MotionEvent event) { 
    //... 
    return super.onDown(event); 
    } 

    @Override 
    public boolean onSingleTapUp(MotionEvent event) { 
    //... 
    return true; 
    } 

    @Override 
    public void onLongPress(MotionEvent event) { 
    //... 
    super.onLongPress(event); 
    } 
} 

Spero che sia d'aiuto.

13

È necessario eseguire l'override di onDown e renderlo return true. Il seguente codice ha funzionato per me:

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); 
    } 
} 
Problemi correlati