Android 事件分发分情况讨论总结

Android 事件分发分情况讨论总结


强烈建议大家打log验证一下下面说到的每一种状态,有助于加深对它的理解。
推荐博文:https://www.jianshu.com/p/24901c309cf4

1、dispatchTouchEvent

返回值的意思:下面是否有view能处理事件?(是否分发成功了事件?),其实返回值最终是onTouchEvent的返回值,只不过不知道是哪一个view。

当返回true,说明下方有东西消费了事件,将继续接受事件。尽管这个true是你骗他的。注意,一切事件都是由Down开始的,不管这三个哪个方法,第一个收到的必须是Down,否则对应方法不会被调用(比如说拦截了Down,最先传进去的是Move,那这个方法不会调用)

当返回super.dispatchTouchEvent(ev),正常分发事件,首先经过onInterceptTouchEvent,根据返回值确定是继续分发还是由自己的onTouchEvent执行。

当返回false,说明自己下方没有东西消费事件,以后就不再会接收到任何事件了。

2、onInterceptTouchEvent

返回值的意思:就是简简单单判断是否拦截。true拦截false不拦截。一次点击事件一旦拦截就没有后悔药可以吃了。

当返回true表示拦截,则自己的onTouchEvent执行。一旦拦截,则自己的onTouchEvent执行,不再经过这个方法。如果onTouchEvent返回false,则执行activity的onTouchEvent。

当返回false表示不拦截,继续寻找要命中的onTouchEvent。同时,每一次都还经过这个方法(直到拦截成功)。

3、onTouchEvent

返回值的意思:子view是否消费了事件,比如说拖动了一段距离,点击事件等。false表示没有消费事件,则一层层往上传递。注意,一旦命中一次onTouchEvent,那么自始至终都将一直是这个view执行事件,除非拦截或者onTouchEvent返回false。如果返回false,则执行activity的onTouchEvent

当返回true,表示已经消费,不往上传递了。同时,选中当前onTouchEvent为目标,每一次都只能是这个view的onTouchEvent执行。

当返回false,表示自己没有消费,则往上寻找可以消费的view。如果曾经返回过true,则不往上寻找了,直接调用activity的onTouchEvent(这是个坑,注意)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值