2012-08-15 12 views
16

Chciałbym uruchomić zegar, który rozpoczyna się po pierwszym naciśnięciu przycisku i kończy się po zwolnieniu (w zasadzie chcę zmierzyć, jak długo przycisk jest przytrzymany). Będę używać metody System.nanoTime() w obu tych czasach, a następnie odejmij początkową liczbę od ostatniej, aby uzyskać pomiar czasu, który upłynął, gdy przycisk był wciśnięty.Jak wykrywać, kiedy przycisk naciśnięty i zwolniony na Androidzie

(Jeśli masz jakieś sugestie dotyczące korzystania z czegoś innego niż nanoTime() lub jakiś inny sposób pomiaru jak długo przycisk jest wciśnięty, jestem otwarty na te, jak również.)

Dzięki! Andy

+0

podobne do tego SO postu: http://stackoverflow.com/q/4410362/2069407 –

Odpowiedz

28

Zastosowanie OnTouchListener zamiast 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

dostarczyć nam kod zrobiłeś dla przycisku kliknij –

+0

Niestety, ten nie działa po naciśnięciu przycisku na klawiaturze. Działa tylko wtedy, gdy jest dotykany. –

+0

Chcesz zobaczyć, jak długo naciska się przycisk klawiatury? – Nick

4
  1. W onTouchListener uruchomić stoper.
  2. W onClickListener zatrzymaj czas.

obliczyć różnicę.

5

To z pewnością działa:

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