Android 禁用双抽头或检测第二抽头位置
我有一个带有手势检测器和扩展SimpleOnGestureListener的GLSurfaceView。我需要能够通过快速点击曲面视图上的多个项目来选择它们。由于OnSingleTapConfiged的速度太慢,我超越了onSingleTapUp以快速检测触摸。现在的问题是,如果曲面视图上的两个项目彼此接近,并且用户快速点击其中一个,然后点击另一个,则会为第一个项目调用onSingleTapUp方法,但不会为第二个项目调用onSingleTapUp方法。第二个调用onDoubleTap方法,不管它是否被重写 为了解决这个问题,我试图简单地不重写onDoubleTap方法,并且我还尝试在重写的onDoubleTap中不做任何事情,并返回false。两者都不能解决问题。第二次点击仍不会调用onSingleTapUp方法 我决定尝试在onDoubleTap方法中检测第二次点击,并从中选择项目。问题是从onDoubleTap返回的运动事件包含“双击第一次点击的向下运动事件”。- 有没有办法禁用双击、更改双击时间使其永远不会触发、将双击半径更改为非常小的值,或者在onDoubleTap方法中获取第一个点击位置 以下是我的SimpleNogestureListener:Android 禁用双抽头或检测第二抽头位置,android,Android,我有一个带有手势检测器和扩展SimpleOnGestureListener的GLSurfaceView。我需要能够通过快速点击曲面视图上的多个项目来选择它们。由于OnSingleTapConfiged的速度太慢,我超越了onSingleTapUp以快速检测触摸。现在的问题是,如果曲面视图上的两个项目彼此接近,并且用户快速点击其中一个,然后点击另一个,则会为第一个项目调用onSingleTapUp方法,但不会为第二个项目调用onSingleTapUp方法。第二个调用onDoubleTap方法,不管
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(运动事件e)
如果需要第二次轻触的向上运动,则:
onDoubleTapEvent(MotionEvent e) {
if(e.getAction() != MotionEvent.ACTION_UP) {
return false; // Don't do anything for other actions
}
// YOUR CODE HERE
return true;
}
祝你好运!
/Carlos它没有很好的文档记录,但是为了忽略双击,并将其检测为两个单独的点击,将
null
设置为双击侦听器就足够了
GestureDetector gd = new GestureDetector(context, gestureListener);
gd.setOnDoubleTapListener(null);
适用于
GestureDetector
和GestureDetectorCompat
GestureDetector.OnDoubleTapListener具有以下方法
enter code here
public class ViewGestureListener extends GestureDetector.SimpleOnGestureListener,
GestureDetector.OnDoubleTapListener {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.d(TAG, "onSingleTapConfirmed");
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.d(TAG, "onDoubleTap");
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.d(TAG,"onDoubleTapEvent");
return false;
}
OnDoubleTapEvent在双抽头的每次抽头后调用。您可以在此处返回true并分别获取每个点击