7

我是 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

4 回答 4

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
    }
}
于 2012-03-19T02:43:58.273 回答
11

AMotionEvent有一个时间戳。用于getEventTime()访问它。

事实上,由于无法保证MotionEvent立即交付给您的代码,因此此时间戳比您从System.getCurrentTimeMillis().

于 2013-04-01T21:41:56.890 回答
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 
    } 
} 
于 2016-07-07T05:57:06.403 回答
0

每个事件也有getDownTime()方法。所以当你收到MotionEvent.ACTION_UP你可以简单的使用

event.getDownTime() - event.getEventTime()

计算经过的时间。

于 2019-02-04T11:46:33.150 回答