0

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

试图在 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);
        }

当我在表面上投掷时,它会检测到长按并打印长按而不是投掷的调试消息。无论我在屏幕上做什么,它只会检测到长按.. 有什么问题?

4

1 回答 1

2

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

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

文档中:

这是因为所有手势都以 onDown() 消息开头。如果您从 onDown() 返回 false,正如 GestureDetector.SimpleOnGestureListener 默认所做的那样,系统假定您要忽略手势的其余部分,并且永远不会调用 GestureDetector.OnGestureListener 的其他方法。这有可能在您的应用程序中导致意外问题。”

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

于 2014-02-18T16:15:17.690 回答