我有一个应用程序可以覆盖 onTouchEvent(MotionEvent ev)
的 MainActivity
以确定 Two-Finger-Swipe
和 Pich-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;
}
通过从边缘滑动(-> 抽屉卡住)打开抽屉,我得到了一个非常奇怪的行为:
CustomDrawerLayout.onTouchEvent
) 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/