Android View的事件分发机制
ViewGroup的事件分发逻辑
从Activity传递给Window,再传递给ViewGroup,ViewGroup的dispatchTouchEvent()会被调用,如果onInterceptTouchEvent()返回true
转交自身onTouchEvent()处理,如果返回false继续向子View传递,子View的dispatchTouchEvent()会被调用,若子View是ViewGroup,重复上述流程。若子View是普通View,调用其onTouchEvent()
View的事件处理
1、OnTouchListener优先:若设置且onTouch()返回true,则onTouchEvent()不被调用。
2、默认行为:View的onTouchEvent()处理点击(如OnClickListener)和长按(OnLongClickListener),返回true表示消费事件。
滑动冲突处理
requestDisallowInterceptTouchEvent():子View可调用此方法,禁止父ViewGroup拦截事件(如处理横向滑动时阻止父ViewPager切换页面)。