禁用双击或检测第二个水龙头位置
我有一个带有GestureDetector和扩展SimpleOnGestureListener的GLSurfaceView。 我需要能够通过快速点击来在表面视图中选择多个项目。 因为onSingleTapConfirmed太慢了,所以我忽略了onSingleTapUp以快速检测触摸。 现在的问题是,如果表面视图上的两个项目彼此靠近并且用户快速点击另一个,然后对第一个项目调用onSingleTapUp方法,但对第二个项目不调用onSingleTapUp方法。 第二个调用onDoubleTap方法,不管它是否被覆盖。
为了解决这个问题,我试图简单地不重写onDoubleTap方法,我也试图在重写的onDoubleTap中不做任何事情,并返回false。 既不能解决问题。 onSingleTapUp方法仍不会被第二次点击调用。
我决定尝试检测onDoubleTap方法中的第二次敲击并从那里选择项目。 与此相关的问题是从onDoubleTap返回的动作事件包含“双击的第一个水龙头的向下运动事件”。 - http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
有什么办法可以禁用双击,改变双击时间以便永远不会触发,将双击半径改变为非常小的值,或者在onDoubleTap方法中获得第一个敲击位置?
这是我的SimpleOnGestureListener:
public class ViewGestureListener extends
GestureDetector.SimpleOnGestureListener {
private ViewRenderer renderer;
private GLSurfaceView surfaceView;
public ViewGestureListener(GLSurfaceView surfaceView,
ViewRenderer renderer) {
this.renderer = renderer;
this.surfaceView = surfaceView;
}
// Pan
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
renderer.pan(distanceX, distanceY);
surfaceView.requestRender();
return true;
}
// Double touch and release
@Override
public boolean onDoubleTap(MotionEvent e) {
// Note: e.getX() doesn't return the second tap's location!
renderer.singleTouch(e.getX(), e.getY());
surfaceView.requestRender();
return true;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
renderer.singleTouch(e.getX(), e.getY());
surfaceView.requestRender();
return true;
}
}
谢谢,马特
我可能来不及帮助这篇文章的作者,但我只是面临同样的问题,所以这里是其他人想知道的答案。
回答:
您需要重写以下方法,它会为您提供第二次点击的关闭,移动和上移事件:
onDoubleTapEvent(MotionEvent e)
如果你想要第二次敲击的UP运动,那么:
onDoubleTapEvent(MotionEvent e) {
if(e.getAction() != MotionEvent.ACTION_UP) {
return false; // Don't do anything for other actions
}
// YOUR CODE HERE
return true;
}
祝你好运! /卡洛斯
它没有很好的记录,但为了忽略双击,并将其检测为两个单独的水龙头,足以将null
设置为双击侦听器。
GestureDetector gd = new GestureDetector(context, gestureListener);
gd.setOnDoubleTapListener(null);
适用于GestureDetector
和GestureDetectorCompat
。
上一篇: Either disable double tap or detect second tap location
下一篇: getView of ArrayAdapter inconsistent with image downloading