2012-08-15 159 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; 
    } 
});