我想在一个名为belowContainer的RelativeLayout上检测手势,我的代码如下所示:

    // Create a new GestureListener
    GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2,
                float velocityX, float velocityY) {
            Log.d("test", "velocityx=" + velocityX);
            return true;

        }

    };

    // Setup a new GestureDetector, attach the custom GestureListener
    final GestureDetector gestureDetector = new GestureDetector(this, gestureListener);

    // Attach the GestureDetector to the belowContainer onTouchListener
    belowContainer.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            Log.d("test", "clicked!");
            if(gestureDetector.onTouchEvent(event))  {
                Log.d("test", "gesture detected");
                return true;
            }

            return false;
        }
    });

我的应用程序注册了belowContainer onTouch正常,但是以某种方式未检测到挥动手势(日志仅显示“已单击!”,而没有其他显示)。怎么会?

最佳答案

您是在设备上还是在仿真器中进行测试?

我看不到您的代码有问题。 belowContainer是否足够大,以便您有足够的空间摆出手势?您内部是否存在任何可能“拦截”触摸事件的视图?

我建议您记录手势侦听器可能捕获的所有其他方法,以便您知道是否正在获取其他手势。

您还可以尝试从 Activity 而不是从视图传递onTouchEvents……这样一来,捕获手势事件会更容易(只是确保一切正常!)
(重写Activity.onTouchEvent并将事件传递给手势检测器。

09-11 13:35