【Android】【事件分发】事件冲突解决方案

转载自:https://www.jianshu.com/p/c62fb2f25057
文章内容总结如下:

事件分发流程:
1. ViewGroup.dispatchTouchEvent将事件分发给子View
2. 子View如果不需要处理该事件,可以在View.dispatchTouchEvent或View.TouchListener.onTouch方法中通过getParent().requestDisallowInterceptTouchEvent(false)来让父容器拦截该事件
如果需要处理,则调用getParent().requestDisallowInterceptTouchEvent(true)
3. ViewGroup.onInterceptTouchEvent决定是否拦截该事件(如果方法没有被重写,子View没有发出拦截申请,默认返回false,不拦截)
4. 最终拿到Event的控件执行View.onTouchEvent方法

冲突解决的一般思路:
通过触摸事件的位置,方向,判断Event要给谁处理,然后有两种方法实现拦截
1. 在子View中通过requestDisallow向父ViewGroup申请是否拦截
2. 重写ViewGroup的onIntercept方法,决定是否拦截

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013718730/article/details/80509413