GLSurfaceView不检测Android的手势

时间:2014-02-18 14:58:29

标签: android gestures glsurfaceview gesturedetector

我正在尝试使用Opengl es 2进行简单的2D游戏。我正在使用GLSurfaceView。我试图检测视图上的fling手势,但它没有检测到任何东西。为什么是这样?以下是代码: -

试图在glsurfaceview内外声明手势检测器。

@SuppressWarnings("deprecation")
    final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        public void onLongPress(MotionEvent e) {
            Log.d("", "Longpress detected");
        }

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2,
                float velocityX, float velocityY) {
            Log.d("", "OnFling detected");
            return super.onFling(e1, e2, velocityX, velocityY);
        }


    });

GLSurfaceView内部

    @Override
    public boolean onTouchEvent(MotionEvent event) {
            return gestureDetector.onTouchEvent(event);
        }

当我在表面上晃动时,它会检测到长按并打印调试信息,以便长按而不是甩掉。无论我在屏幕上做什么,它只是检测到长按..出了什么问题?

1 个答案:

答案 0 :(得分:2)

在侦听器中包含onDown的覆盖:

@Override
public boolean onDown(MotionEvent event) { 
    return true;
}

来自documentation

  

这是因为所有手势都以onDown()消息开头。如果从onDown()返回false,默认情况下GestureDetector.SimpleOnGestureListener会执行false,系统会假定您要忽略其余的手势,而GestureDetector.OnGestureListener的其他方法永远不会被调用。这可能会在您的应用中造成意外问题。“

我很欣赏这并不能解释为什么你仍然设法检测到长版。如果以上解决了您的问题,也许这是一个不需要解决的难题......