我的应用有一个可点击的视图,然后单击此视图时,应调用handleClickEvent()。我尝试将OnClickListener设置为视图,但是当用户双击视图时,handleClickEvent()会被调用两次。我不希望它在双击期间被调用两次。即我希望handleClickEvent()在单击和双击时都被称为ONCE。
我做了一些研究并发现了这个问题:Android detecting double tap without single tap first我尝试了答案中的建议,即用onSingleTapConfirmed()方法实现GestureDetector。这很有效,但是我注意到与使用OnClickListener相比,响应时间有明显的延迟。我假设这是因为onSingleTapConfirmed()仅在系统通过等待某段时间确认这是一次点击后才被调用。
是否有没有明显的延迟实现这一点?我能想到的另一个选择是使用lastClickedTimeStamp成员变量,比较用lastClickedTimeStamp点击时的当前时间,如果它在某个阈值内,则不做任何事情。
我想知道是否还有其他选择?
谢谢!
答案 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);
}
});