【Android】Android事件分发机制总结

三个回调方法
  • DispatchTouchEvent
  • OnInterceptTouchEvent (只有ViewGroup有)
  • OnTouchEvent
三个回调方法的关系

DispatchTouchEvent包含了OnInterceptTouchEvent、OnTouchEvent,后两个方法是平行的,互不包含的关系。

三个方法的调用顺序

外层View:DispatchTouchEvent —> 内层View:DispatchTouchEvent
每层View:DispatchTouchEvent —> OnInterceptTouchEvent—>OnTouchEvent

当OnInterceptTouchEvent返回false时,继续向子View传递,调用子View的DispatchTouchEvent;当OnInterceptTouchEvent返回true的时候,不再向下传递,直接调用这个View的OnTouchEvent。

当遇到最后一个View的时候,调用它的OnInterceptTouchEvent后就调用它的OnTouchEvent,这个View的DispatchTouchEvent也就结束了。如果最后一个View的OnTouchEvent返回false,则事件向上传递,调用上一个View的OnTouchEvent,如果OnTouchEvent返回true,则事件结束。

一般OnTouchEvent返回什么DispatchTouchEvent就返回什么。

DispatchTouchEvent返回true的时候,单个事件就结束了,不再传递。

当某个View的OnTouchEvent返回true,表示这个事件已经找到消费者了,后续事件(move、up)就不会再走这个view的onInterceptTouchEvent,直接给到OnTouchEvent。但是每一个事件还是会走上层View的OnInterceptTouchEvent。

当某个View的OnInterceptTouchEvent返回true,不管这个事件是什么,直接调用这个View的onTouchEvent()。如果这个View的childView在上一个事件的DispatchTouchEvent(或OnTouchEvent)返回了true,这个时候就要调用childView的OnTouchEvent,事件类型是cancel。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值