测量Android中两个MotionEvent之间的经过时间

时间:2012-03-19 02:36:48

标签: java android time elapsed

我是Android编程的新手,所以我在问题上寻求帮助。 我试图以秒/毫秒为单位测量MouseEvent.ACTION_DOWN和MouseEvent.ACTION_UP之间的时间。

@Override
public boolean onTouchEvent(MotionEvent event) {
    long start=0;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        // manage down press
        start=System.nanoTime();//START
        System.out.println("START");
    }
    else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        // manage move
        System.out.println(event.getRawX()+","+event.getRawY());
    }
    else {
        // manage up
        long finish=System.nanoTime()//FINISH
        long seconds = (finish-start) / 1000000000;//for seconds
        Toast.makeText(this, "FINISH, duration: "+seconds, Toast.LENGTH_SHORT).show();
        System.out.println("FINISH, duration: "+seconds);
    }
    return true;
}




Logcat:
03-19 04:04:27.140: I/System.out(4348): START
03-19 04:04:27.160: I/System.out(4348): 517.0,280.0
03-19 04:04:27.190: I/System.out(4348): 517.0,280.0
03-19 04:04:27.200: I/System.out(4348): 517.0,280.0
03-19 04:04:27.220: I/System.out(4348): 517.0,280.0
03-19 04:04:27.250: I/System.out(4348): 517.0,280.0
03-19 04:04:27.260: I/System.out(4348): 517.0,280.0
03-19 04:04:27.300: I/System.out(4348): 517.0,280.0
03-19 04:04:27.310: I/System.out(4348): 517.0,280.0
03-19 04:04:27.330: I/System.out(4348): FINISH, duration: 16545
  

我的问题在于,秒变量不显示我的内容   想要,我甚至不知道它的测量是否正确。对于上述情况   示例持续时间是16545(???!?!?),但应该介于两者之间   1-3秒。我该怎样做才能在几秒钟或几秒内正确测量   毫秒,两个MotionEvent之间的时间或我错在哪里   我的例子?谢谢!

4 个答案:

答案 0 :(得分:11)

long startTime;
public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) 
        startTime = System.nanoTime();    

    else if (event.getAction() == MotionEvent.ACTION_UP) {
        long elapseTime = System.nanoTime() - startTime;
        //do whatever u want with elapseTime now, its in nanoseconds
    }
}

答案 1 :(得分:8)

MotionEvent有一个时间戳。使用getEventTime()进行访问。

事实上,由于无法保证MotionEvent会立即传递给您的代码,因此此时间戳比System.getCurrentTimeMillis()获得的任何时间都更准确。

答案 2 :(得分:0)

以下是@CvR描述的解决方案:

private long startTimeInMilliSec;
@Override 
public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) 
        startTimeInMilliSec = event.getEventTime();    

    else if (event.getAction() == MotionEvent.ACTION_UP) {
        long elapsedTime = event.getEventTime() - startTimeInMilliSec;
        //do whatever u want with elapsedTime now, its in milliseconds 
    } 
} 

答案 3 :(得分:0)

每个事件也具有getDownTime()方法。因此,当您收到MotionEvent.ACTION_UP时,就可以简单地使用

event.getDownTime() - event.getEventTime()

计算经过的时间。