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。

你可能感兴趣的:(Android)