Android 事件分发 dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent

Android中整个touch事件的分发流程:

手指点击屏幕 --> 屏幕驱动通知linux系统  --->  系统通知WindowManagerService(WMS) --> WMS分发给Activity -->  Activity再分发给view

1.onInterceptTouchEvent

onInterceptTouchEvent是viewGroup中的方法,非ViewGroup是没有的。该方法有个 boolean类型的返回值,当返回false(默认值)的时候,则表示将touch事件继续向下分发给子view。如果返回true则不再将事件分发,意思就是子view不会接收到touch事件

2.dispatchTouchEvent

dispatchTouchEvent是View中的方法,即所有的view都拥有此方法。dispatchTouchEvent的作用是事件分发。

在ViewGroup中重写了dispatchTouchEvent方法,普通的view中直接判断onTouchEvent返回是否为true,如果为true则dispatchtouchEvent也为true。但viewGroup中却不是,viewGroup中会先去调用onInterceptTouchEvent返回是否为true,如果不为true,则会去分发子控件中的touch事件,如果事件被子控件消费了,那么它会返回true,且不会调用自己的onTouchEvent方法

假如,该view的dispatchtouchEvent方法返回了false,那么该view在这次touch事件中将不会再被调用,包括该view的子view。

3.onTouchEvent

ontouchEvent是对touch事件的消费,整个调用链中,只会有一个view的onTouchEvent方法会被执行,谁消费了就谁执行,如果onInterceptTouchEvent不拦截子view,那么就会由子view先决定是否进行消费,子view不消费才会轮到上层view去消费。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值