Android 一行代码解决菜单隐藏问题,又扔给你事件分发机制

来源:互联网 发布:一淘 淘宝客 编辑:程序博客网 时间:2024/05/21 19:40

你还在为隐藏菜单而监听每个控件的触摸事件头疼吗?你还不理解事件分发机制吗?你曾想过有其它捷径吗?

这篇文章除了解决菜单隐藏问题,你还能学到事件分发机制,读到这里是不是有点小激动呢。

废话不多说,直入主题:
我们都知道触摸事件的传播方向是 activity-->view。我们又知道一个完整的触摸事件包括ActionDown、ActionMove和ActionUp,其中ActionDown肯定是先进行的,它起到探路者的作用,这个探路者会引导接下来的两个action会在哪个view层起作用。
这里有一张表:

触摸事件的传播方向由字面意思我们就知道由dispatchTouchEvent开始的,上面我们说到ActionDown是探路者,假设我们有四层,即activity-->viewGroup1-->viewGroup2--> view:
一、假设所有viewGroup层的onInterceptTouchEvent返回false,ActionDown会传到view的onTouchEvent中:
1、当onTouchEvent返回true,说明探路者ActionDown找到了目标,那接下来的ActionMove、ActionUp会在这个View的onTouchEvent方法中起作用,其它层就不会响应了。
2、当onTouchEvent返回false,ActionDown会跑到上层(ViewGroup2)的onTouchEvent方法中,接下来的处理就跟View的处理方式一样了。
二、假设某一个viewGroup的onInterceptTouchEvent返回true,说明就不往下传播了,会交给本层的onTouchEvent处理,接下来的处理就跟View的处理方式一样了,这里就不赘述了。
其实事件分发里边还有很多的技巧,这里只讲最基本的传播原理。

BB了这么多,我们如何一行代码解决菜单隐藏问题呢。

由上面的知识点我们知道,一个触摸事件来了肯定会先到activity的dispatchTouchEvent方法中,那么就简单了,我们只要在activity的dispatchTouchEvent中做点事情就行了:
@Override    public boolean dispatchTouchEvent(MotionEvent ev) {        menu.setVisibility(View.GONE);        return super.dispatchTouchEvent(ev);    }
是不是很简单,一行代码解决菜单隐藏问题!
谢谢小伙伴们的阅读,之后会提高博客更新速度的,希望大家多多支持!
有问题的小伙伴可以在下面留言哦



0 0