2012-06-29 16 views
7

Devo rilevare nella mia applicazione quando l'utente smette di spostarsi attraverso una vista specifica. Sto creando qualcosa di simile al testo della marca nella mia applicazione che può interagire mentre l'utente sta toccando la vista e si muove su di essa. E ho bisogno di iniziare a scorrere la vista dopo che l'utente ha alzato il dito. Come noto, se metto il dito sulla vista per alcuni secondi e quando alzo il dito, non viene chiamato lo MotionEvent.ACTION_UP. L'ultimo evento che catturo è ACTION_MOVE. Quindi, come posso rilevare quando l'utente alza il dito dopo aver attraversato la vista per alcuni secondi? Esiste qualche tipo di funzione in grado di rilevarlo?come rilevare quando MotionEvent.ACTION_MOVE è terminato

Ecco il codice che sto usando:

txt.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, final MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       Log.e("","event down : "+event.getAction()); 
       handler.removeCallbacks(runnable); 
       break; 
      case MotionEvent.ACTION_UP: 
       Log.e("","event up : "+event.getAction()); 
       if(myTimer!=null){ 
        myTimer.cancel(); 
       } 
       break; 
      case MotionEvent.ACTION_MOVE: 
       Log.d("","move"); 
       // handler.removeCallbacks(runnable); 
       checkX(); 
       break; 
     } 
     return true; 
    } 
}); 

Grazie in anticipo!

+0

mostra il tuo codice. quindi possiamo aiutare il codice di esempio – rajpara

+0

aggiunto. –

+0

Ho lo stesso problema con il multitouch, dopo il primo dito su MotionEvent.ACTION_MOVE viene inviato, quindi MotionEvent.ACTION_POINTER_UP. È qualcosa di stupido ... –

risposta

2

Penso che l'evento possa inviare un'azione ACTION_CANCEL prima che il gesto sia terminato. Oppure, se trascorre fuori dalla vista che stai controllando, potrebbe essere ACTION_OUTSIDE.

Il modo migliore per confermare/debug questo sarebbe quella di mettere una dichiarazione Log.d() in, stampare il valore MotionEvent.getActionMasked(), e controllare per vedere quali azioni sono chiamati dopo l'evento ACTION_MOVE finisce.