dispatchTouchEvent以及onTouchEvent事件分发

为了理清思路,先省去了对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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值