安卓触摸事件如何确定持续时间

9
如何检测Android 2.1触摸事件的持续时间?如果该区域被按压了5秒钟,我想要做出响应。
3个回答

24
long eventDuration = event.getEventTime() - event.getDownTime();

15
你可以尝试结合 MotionEventRunnable/Handler,来实现这个效果。

示例代码:

private final Handler handler = new Handler();
private final Runnable runnable = new Runnable() {
    public void run() {
         checkGlobalVariable();
    }
};

// Other init stuff etc...

@Override
public void onTouchEvent(MotionEvent event) {
    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        // Execute your Runnable after 5000 milliseconds = 5 seconds.
        handler.postDelayed(runnable, 5000);
        mBooleanIsPressed = true;
    }

    if(event.getAction() == MotionEvent.ACTION_UP) {
        if(mBooleanIsPressed) {
            mBooleanIsPressed = false;
            handler.removeCallbacks(runnable);
        }
    }
}

现在你只需要在checkGlobalVariable()函数中检查mBooleanIsPressed是否为true

我想到的一个方法是使用简单的时间戳(例如System.currentTimeMillis())来确定MotionEvent.ACTION_DOWNMotionEvent.ACTION_UP之间的持续时间。


好的。这是我在大多数Activity屏幕上需要的东西。如何在Activity屏幕上启用监听?我已经在Activity中实现了onTouchEvent监听器,但是如何为Activity启用它,以使当用户触摸Activity屏幕时调用onTouchEvent。谢谢。 - Androider
我正在寻找类似于getContentView()的东西? - Androider
我想获取当前内容视图并设置其onTouchListener。 - Androider
时间戳可能效果不错,我认为这更简单。但是我不确定它的准确性。 - Androider
这对我非常有帮助,非常感谢!需要注意的一点是,由于我的视图位于分页器中(即可以滚动),因此我还需要在MotionEvent.ACTION_CANCEL开关情况下取消处理程序。这样,当触摸事件被分页器窃取时,我的处理程序就不会触发。 - StackJP
显示剩余5条评论

8
在这种情况下,您不能使用Unix时间戳。Android提供了自己的时间测量方法。
long eventDuration = 
            android.os.SystemClock.elapsedRealtime() 
            - event.getDownTime();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接