安卓无需使用onSingleTapConfirmed

时间:2017-04-17 02:22:38

标签: android onclick onclicklistener gesture double-click

我的应用有一个可点击的视图,然后单击此视图时,应调用handleClickEvent()。我尝试将OnClickListener设置为视图,但是当用户双击视图时,handleClickEvent()会被调用两次。我不希望它在双击期间被调用两次。即我希望handleClickEvent()在单击和双击时都被称为ONCE。

我做了一些研究并发现了这个问题:Android detecting double tap without single tap first我尝试了答案中的建议,即用onSingleTapConfirmed()方法实现GestureDetector。这很有效,但是我注意到与使用OnClickListener相比,响应时间有明显的延迟。我假设这是因为onSingleTapConfirmed()仅在系统通过等待某段时间确认这是一次点击后才被调用。

是否有没有明显的延迟实现这一点?我能想到的另一个选择是使用lastClickedTimeStamp成员变量,比较用lastClickedTimeStamp点击时的当前时间,如果它在某个阈值内,则不做任何事情。

我想知道是否还有其他选择?

谢谢!

2 个答案:

答案 0 :(得分:2)

我这样做的方法是将状态变量设置为long并将其命名为timeOfLastTouch并将其设置为0.然后在每个OnClickListener函数中将此代码放入其

long currentTime = System.currentTimeMillis();
if (timeOfLastTouch + 100 < currentTime) {
    // code
    timeOfLastTouch = System.currentTimeMillis();
}

答案 1 :(得分:0)

您可以尝试使用GestureDetector.SimpleOnGestureListener并将其与onTouchEvent结合使用。

private GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.d("SingleTap", " is detected");
        return true;
    }

    @Override
    public boolean onDoubleTap(MotionEvent e) {
        Log.d("DoubleTap", " is detected");
        return true;
    }
});

然后,删除onClickListener并在该视图上设置触摸事件

 yourView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        return gestureDetector.onTouchEvent(event);
    }
});

您可以参考Detecting Common Gestures