2018-01-22

Android事件分发解析(一)

        关于Android的事件分发机制,一直以来都是开发者进阶路上必须突破的一道关卡,也是面试必定会问到的问题,今天我们就写个demo来深究一下其中的奥秘。


        话不多说,直接切入正题,Activity布局如下:

Activity布局

    用一个自定义ViewGroup嵌套一个自定义ViewGroup,在嵌套一个自定义TextView,我们首先看看ViewGroup1的自定义写法:

贴出关键的代码

再看ViewGroup2的写法:

viewgroup2关键代码

最后是自定义TextView的代码

自定义textview代码

首页布局显示图如下:

手机显示效果图



有了上面的一系列准备工作,下面就可以开始分析了,首先从最外层的ViewGroup1开始:

1.点击空白处:

由于空白处不属于任何ViewGroup或View,所以直接给Activity处理

2.点击viewgroup1:

点击VP1区域,由于VP1本身没有做事件拦截处理,所以交给其父类,即最终的activity处理。

此时我们小小的做一下改变:

a.如果viewgroup1的dispatchTouchEvent返回true:

我们快速点击一下group1区域(此时只有down和up事件,没有move事件),打印如下:

也就是说,dispatchTouchEvent方法返回true时,onTouchEvent方法不会被执行,并且他所有子view的触摸事件也不会被执行,DOWN\MOVE\UP三个触摸动作相应的结果会在dispatchTouchEvent方法中执行。此外该方法里面可以对单一事件(如down事件)进行分发判断,

b.如果viewgroup1的onInterceptTouchEvent方法返回true:

我们快速点击一下group1子类区域,log如下:

也就是说,此时所有子view的触摸事件都无效,统一交给了父类进行处理

你可能感兴趣的:(2018-01-22)