禁用双击或检测第二个水龙头位置

我有一个带有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);

适用于GestureDetectorGestureDetectorCompat

链接地址: http://www.djcxy.com/p/91309.html

上一篇: Either disable double tap or detect second tap location

下一篇: getView of ArrayAdapter inconsistent with image downloading