Android 禁用双抽头或检测第二抽头位置

Android 禁用双抽头或检测第二抽头位置,android,Android,我有一个带有手势检测器和扩展SimpleOnGestureListener的GLSurfaceView。我需要能够通过快速点击曲面视图上的多个项目来选择它们。由于OnSingleTapConfiged的速度太慢,我超越了onSingleTapUp以快速检测触摸。现在的问题是,如果曲面视图上的两个项目彼此接近,并且用户快速点击其中一个,然后点击另一个,则会为第一个项目调用onSingleTapUp方法,但不会为第二个项目调用onSingleTapUp方法。第二个调用onDoubleTap方法,不管

我有一个带有手势检测器和扩展SimpleOnGestureListener的GLSurfaceView。我需要能够通过快速点击曲面视图上的多个项目来选择它们。由于OnSingleTapConfiged的速度太慢,我超越了onSingleTapUp以快速检测触摸。现在的问题是,如果曲面视图上的两个项目彼此接近,并且用户快速点击其中一个,然后点击另一个,则会为第一个项目调用onSingleTapUp方法,但不会为第二个项目调用onSingleTapUp方法。第二个调用onDoubleTap方法,不管它是否被重写

为了解决这个问题,我试图简单地不重写onDoubleTap方法,并且我还尝试在重写的onDoubleTap中不做任何事情,并返回false。两者都不能解决问题。第二次点击仍不会调用onSingleTapUp方法

我决定尝试在onDoubleTap方法中检测第二次点击,并从中选择项目。问题是从onDoubleTap返回的运动事件包含“双击第一次点击的向下运动事件”。-

有没有办法禁用双击、更改双击时间使其永远不会触发、将双击半径更改为非常小的值,或者在onDoubleTap方法中获取第一个点击位置

以下是我的SimpleNogestureListener:

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并分别获取每个点击