view 的时间分发由3个重要的方法完成的 dispatchTouchEvent onInterceptTouchEvent onTouchEvent 之间的关系为:
置了 onTouchListener 那么他的onTouch方法会回调,如果返回的Boolean 值为false,则当前View 的onTouchEvent的方法会被调用 ,反之则不会被调用,setOnTouchListener方法的优先级大于 onTouchEvent ,View如果设置了OnClickListener,则在onTouchEvent中被调用
整体的优先级是 dispatchTouchEvent > onInterceptTouchEvent > setOnTouchListener > onTouchEvent > OnClickListener
当一个时间产生后,传递的过程是 Activity ->Window ->顶级View
View 和ViewGroup 的区别:View没有onInterceptTouchEvent方法,一旦有时间传递给他那么直接onTouchEvent方法被调用,而ViewGroup默认不拦截任何事件,OnInterceptTouchEvent方法默认返回false。
子View通过调用requestDisallowInterceptTouchEvent(true)方法,可以干预父元素的事件分发, 调用该方法,一旦底层View收到touch的action后调用这个方法那么父层View就不会再调用onInterceptTouchEvent了,也无法截获以后的action。