Android事件分发流程图

开始
转到ViewGroup事件分发
DecorView中无响应事件
如果点击事件在屏幕外面
正常不应该走
DecorView可点击
询问拦截
true 拦截
false 不拦截
无view接收事件 true 拦截
通过点击坐标寻找点击的view
注册OnTouchListener & 空间可点击 & mOnTouchListener.onTouch为true
可点击
不可点击
Activity
Activity.dispatchTouchEvent
DecorView.superDispatchTouchEvent
Activity.onTouchEvent
Activity处理了事件
默认事件没有处理
ViewGroup
ViewGroup.dispatchTouchEvent
ViewGroup.onInterceptTouchEvent
事件停止,由ViewGroup处理
遍历view
View.dispatchTouchEvent
由View处理
View.onTouchEvent

总结:

  1. Android事件分发过程是从大到小:Activity->ViewGroup->View
  2. Android事件分发本质上就是ViewGroup->View的过程
  3. 默认情况下ViewGroup负责拦截事件,View负责响应事件
  4. OnClickListener事件是手势抬起来时候响应的

你可能感兴趣的:(自定义view)