4

我有一个实例,我需要一个GestureDetectorActivity拦截水平抛投。此活动也恰好包含一个DrawerLayout.

我遇到的问题是DrawerLayout拦截所有触摸事件,以至于我什至不能requestDisallowInterceptTouchEvents。即使在 Activity 中触发该呼叫,我似乎也无法触摸。

我希望抽屉在关闭时处理从边缘滑动,在打开时从任何地方滑动,就像它应该做的那样。但是我需要我的活动能够在抽屉关闭时拦截其他地方的触摸事件。

4

2 回答 2

0

不确定你是否解决了这个问题,但请确保你的 onTouch(View view, MotionEvent motionEvent){...} 方法返回 true 以指示处理了初始事件,否则抽屉布局将获得初始触摸开始事件无论您传递给 requestDisallowInterceptTouchEvents 什么,都会吞噬下一个。

不幸的是,SDK中的BasicGestureDetect示例从此方法返回false,当没有其他东西可以窃取这些事件并且您只是记录它们时,这很好,但是如果您将该代码复制粘贴到您的应用程序中期望它可以工作(像我一样),除了最初的触摸开始之外,您不会得到任何东西。

因此,BasicGestureDetect 示例中 MainActivity 中的这一部分:

    actionFragment.getView().setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            gd.onTouchEvent(motionEvent);
            return false;
        }
    });

应该改为:

    actionFragment.getView().setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            gd.onTouchEvent(motionEvent);
            return true;
        }
    });
于 2013-10-12T01:08:10.733 回答
0

您可以使用标志。DrawerListener上有一个 onDrawerSlide 方法,当您的抽屉位置发生变化时调用该方法,即抽屉正在运行以自行打开或关闭。您可以在此方法中设置一个标志,指示抽屉正在运行。然后,在 OnGestureListener 的onFling方法上,通过检查标志来显示抽屉是否正在运行。如果它没有运行,你可以在 onFling 方法中做任何你想做的事情,如果没有,不要做任何事情。

我希望它有帮助

http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.DrawerListener.html#onDrawerSlide(android.view.View, float)

于 2013-07-10T15:28:27.670 回答