为了理清思路,先省去了对onInterceptTouchEvent的分析,看看只有dispatchTouchEvent以及onTouchEvent存在的情况下,点击事件的分发。
注意:下列情况都的点击区域的是子控件
情况1:当父控件的dispatchTouchEvent返回super.dispatchTouchEvent(ev)的时候,执行分发操作,父控件、子控件的dispatchTouchEvent以及onTouchEvent呈隧道式执行。
如图
情况2:当父控件的dispatchTouchEvent返回true的时候,停止分发操作,这里包括父控件的onTouchEvent不给予执行,同时子控件的dispatchTouchEvent以及onTouchEvent也不会执行。
情况3:当子控件的dispatchTouchEvent返回true的时候,停止分发操作,这里包括子控件的onTouchEvent不给予执行,同时父控件的onTouchEvent也不会执行。
情况4:当子控件的onTouchEvent返回true的时候,父控件的onTouchEvent也不会执行。
好了,看完上面的4中情况,可以得出以下两个结论:
1、父控件的dispatchTouchEvent优先级比较高,一旦返回true,其一本身父控件的onTouchEvent不执行(这样不是很好吧。。。不急,下面有解决的方法),其二子控件完全无法感觉到有点击事件(dispatchTouchEvent以及onTouchEvent都不执行)
2、子控件的onTouchEvent返回true,其父控件的onTouchEvent将不会执行;
添加了onInterceptTouchEvent的情况:
情况1:当父控件的onInterceptTouchEvent返回true的时候,父控件的onTouchEvent也会执行,只是不向下分发。
显然,onInterceptTouchEvent是用来解决,不往下分发,但仍然需要执行本View/ViewGroup的onTouchEvent的情况。
源码的下载链接是另一位大神的,下载链接:http://files.cnblogs.com/sunzn/TouchEvent.rar
大神链接:http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html