我有一个带有 GestureDetector 和扩展 SimpleOnGestureListener 的 GLSurfaceView。我需要能够通过快速点击它们来选择表面视图上的多个项目。我覆盖了 onSingleTapUp 以快速检测触摸,因为 onSingleTapConfirmed 太慢了。现在的问题是,如果表面视图上的两个项目彼此靠近并且用户快速点击一个然后另一个,那么 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;
}
}
谢谢,马特