2012-08-15 158 views
16

我想啓動一個定時器,該定時器在第一次按下按鈕時開始並在釋放時結束(基本上我想測量按鈕按下的時間長度)。我將在這兩個時間使用System.nanoTime()方法,然後從最後一個數字中減去初始數字,以獲得按鈕按下期間所經過的時間的度量。如何檢測何時按下按鈕並在android上釋放

(如果您對使用超過nanoTime()或測量按鈕多長時間按住的一些其他的方式以外的其他任何建議,我是開放給那些爲好。)

謝謝! 安迪

+0

這個SO後類似:http://stackoverflow.com/q/4410362/2069407 – 2016-04-28 15:19:40

回答

28

使用OnTouchListener代替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

爲我們提供您的按鈕來完成的代碼點擊 – 2012-08-15 06:09:56

+0

不幸的是,這在用鍵盤按下按鈕時不起作用。它只在被觸摸時才起作用。 – 2012-08-26 21:57:14

+0

所以你想看看鍵盤按鈕被按下多長時間? – Nick 2012-08-27 01:38:47

4
  1. 在onTouchListener開始計時。
  2. 在onClickListener中停止時間。

計算差異。

5

這肯定會工作:

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