Android 之 View 事件分发深入源码分析 [ 总结 ]

Android 事件分发之源码分析系列
Android 之事件分发基础篇 [ 一 ]
Android 之 ViewGroup 事件分发深入源码分析 [ 二 ]
Android 之 View 事件分发深入源码分析 [ 三 ]
Android 之 View 事件分发深入源码分析 [ 总结 ]

总结: View 事件分发

  • 触摸事件的传递是从 dispatchTouchEvent 开始的, 如果不进行人为干预 (也就是默认返回父类的同名函数), 则事件将会依照嵌套层次从外层向内层传递, 到达最内层的 View 时, 就由它的 onTouchEvent 方法处理, 该方法如果能够消费该事件, 则返回 true, 如果处理不了, 则返回 false, 这时事件会重新向外层传递, 并由外层 View 的 onTouchEvent 方法进行处理, 依次类推.
  • 如果时间在向内层传递过程中由于人为干预, 事件处理函数返回 true, 则会导致事件提前被消费掉, 内层 View 将不会收到这个事件.
  • View 控件的事件分发顺序是先执行 onTouch 方法, 接着是 onTouchEvent, 再最后才执行 onClick 方法. 如果 onTouch 返回 true, 则事件不会继续传递, 最后也不会调用 onClick 方法. 如果返回 false, 则事件继续传递.

 
 

总结: ViewGroup 事件分发

  • 触摸事件的传递顺序是由 Activity 到 ViewGroup, 再由 ViewGroup 递归传递给它的子 View.
  • ViewGroup 通过 onInterceptTouchEvent 方法对事件进行拦截, 如果该方法返回 true, 则事件不会继续传递给子 View, 如果返回 false 或者 super.onInterceptTouchEvent, 则事件会继续传递给子 View.
  • 在子 View 中对事件进行消费后, ViewGroup 将接收不到任何事件.

 
 
OK, Android 的事件分发源码分析学习, 就先告一段落. 希望大家一起学习, 一起进步. Thanks.

你可能感兴趣的:(Android 之 View 事件分发深入源码分析 [ 总结 ])