- TouchEvent分发处理流程: 一般步骤:dispatchTouchEvent(传递),onInterceptTouchEvent(拦截,只有ViewGroup有这个方法),onTouchEvent(处理) Activity.dispatchTouchEvent –> ViewGroup.dispatchTouchEvent –> View.dispatchTouchEvent –> ViewGroup.onInterceptTouchEvent –> ViewGroup/View.onTouchEvent –> Activity.onTouchEvent
- ViewGroup内部分发流程: ViewGroup.dispatchTouchEvent – View.dispatchTouchEvent - ViewGroup.onInterceptTouchEvent 如果拦截 – 不向子View传递事件 – ViewGroup.onTouchEvent 如果不拦截 – 传递给子View – View.onTouchEvent
- View内部分发流程: View.dispatchTouchEvent – View.onTouchEvent 如果View.onTouchEvent返回true – 不再往下传递 – 结束 如果View.onTouchEvent返回false – Activity.onTouchEvent – 结束
- OnClick事件 onTouchEvent返回true时,onClick监听器不会被执行的 onClick会消耗Event,执行了onClick后,Activity就无法再收到Event
- 事件冲突解决方案 重写子View的dispatchTouchEvent方法,通过getParent.requestDisallowIntercept来告诉父容器,是否要拦截事件 重写ViewGroup的onInterceptTouchEvent方法,来决定是否拦截事件
【Android】【事件分发处理机制】事件分发处理机制
关注
打赏