我有一个应用程序可以覆盖 onTouchEvent(MotionEvent ev)MainActivity 以确定 Two-Finger-SwipePich-Open/Pinch-Close
一切正常,直到我将 DrawerLayout 添加到应用程序(如 Creating a Navigation Drawer 中所述)。问题:DrawerLayout 阻止了 MainActivity 中 onTouchEvent() 的调用。

我开始编写 CustomDrawerLayout ,并尝试覆盖 DrawerLayout 方法 onInterceptTouch()onTouchEvent()

TouchEvent 传输到 MainActivity 的唯一方法(我发现):

    // onTouchEvent of CustomDrawerLayout
    @Override
    public boolean onTouchEvent(MotionEvent ev){
        // super.onTouchEvent(ev); // prevent transmission of TouchEvent
        return false;
    }

这里的问题是抽屉没有正确打开。抽屉卡住,如本文所述:
DrawerLayout getting stuck on swipe

是否可以将 TouchEvent 传输到 MainActivity 以处理 MultiTouchDetection?还是我必须在 CustomDrawerLayout 中处理这个?

更新 1

首先,我不得不说,如果我从左边缘滑动,抽屉只会卡住。通过单击 ActionBar 中的 DrawerIcon,Drawer 工作正常。TouchEvent 的传输使用以下代码。但前提是抽屉打开了!否则 Activity.onTouchEvent 不会被调用!
    // onTouchEvent of CustomDrawerLayout
    @Override
    public boolean onTouchEvent(MotionEvent ev){
        // super.onTouchEvent(ev); // still prevents transmission of TouchEvent
        activity.onTouchEvent(ev);
        return true;
    }

通过从边缘滑动(-> 抽屉卡住)打开抽屉,我得到了一个非常奇怪的行为:
  • 只是 DrawerIcon 可以关闭“卡住的抽屉”(-> 我不希望有什么不同,因为我覆盖了 CustomDrawerLayout.onTouchEvent )
  • 如果我通过 DrawersIcon 关闭卡住的抽屉,CustomDrawerLayout.onTouchEvent 仍称为

  • 那很奇怪!为什么不调用 Activity.onTouchEvent()?我怎样才能防止卡住的抽屉?

    更新 2

    现在我覆盖 CustomDrawerLayout.onInterceptTouch() :
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev){
            return true;
    }
    

    这会导致无法通过从边缘滑动来打开抽屉 -> 只有 DrawersIcon 可以打开和关闭抽屉。但是现在 TouchEvent 总是传输到 Activity (-> 像预期的那样工作)。

    但我真正想要的是有可能通过从边缘 滑动来打开抽屉以获得我的 MultiGestureDetector。这可能吗?

    最佳答案

    更新有点晚,但是在遇到这个问题几天后,最适合我的解决方案是创建一个 CustomDrawerLayout。然后,将构造函数中的 Context 转换为 Activity,从 onInterceptTouchEvent 调用 Activity onTouchEvent。

    @Override public boolean onInterceptTouchEvent( MotionEvent ev )
    {
        getActivity().onTouchEvent( ev );
        return super.onInterceptTouchEvent( ev );
    }
    

    我发现代码是一个蹩脚的黑客......但对我有用。祝你好运!

    关于android - DrawerLayout 阻止调用 MainActivity.onTouchEvent(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21040150/

    10-11 08:00