2012-08-15 16 views
16

Vorrei avviare un timer che inizi quando viene premuto per la prima volta un pulsante e termina quando viene rilasciato (in pratica voglio misurare per quanto tempo viene tenuto premuto un pulsante). Utilizzerò il metodo System.nanoTime() in entrambe le volte, quindi sottrai il numero iniziale da quello finale per ottenere una misurazione per il tempo trascorso mentre il pulsante è stato tenuto premuto.Come rilevare quando si preme e si rilascia il pulsante su Android

(Se avete suggerimenti per l'utilizzo di qualcosa di diverso da nanoTime() o qualche altro modo di misurare quanto tempo un tasto viene tenuto premuto, sono aperto a quelli pure.)

Grazie! Andy

+0

Simile a questo SO messaggio: http://stackoverflow.com/q/4410362/2069407 –

risposta

28

Uso OnTouchListener invece di OnClickListener:

// this goes somewhere in your class: 
    long lastDown; 
    long lastDuration; 

    ... 

    // this goes wherever you setup your button listener: 
    button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      lastDown = System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      lastDuration = System.currentTimeMillis() - lastDown; 
     } 

     return true; 
    } 
    }); 
+0

noi fornire il codice che avete fatto per il pulsante CLICK –

+0

Purtroppo, questo non funziona quando il pulsante viene premuto con la tastiera. Funziona solo quando viene toccato. –

+0

Quindi vuoi vedere per quanto tempo viene premuto un pulsante della tastiera? – Nick

4
  1. Nel onTouchListener avviare il timer.
  2. In onClickListener fermano i tempi.

calcolare la differenza.

5

Questo sarà sicuramente il lavoro:

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_DOWN) { 
      increaseSize(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      resetSize(); 
     } 
     return true; 
    } 
}); 
Problemi correlati