事件传递机制:
责任链机制,从上到下,然后冒泡回到起点
事件传递围绕这三个方法进行
- dispatchTouchEvent -事件的分发
- onInterceptTouchEvent - 阻止分发,返回true子view都接受不到事件
- onTouchEvent -在dispatchTouchEvent使用,用来处理点击事件,返回结果表示是否消费
传递流程
PhoneWindow -> DecorView -> rootview->ViewGroup ->View
ViewGrop 只有自己要拦截掉(onInterceptTouchEvent 返回true),就会走onTouchEvent方法,不然是不会走得
onInterceptTouchEvent 返回false 子View的dispatchTouchEvent 就会被回调
在源码就这样子
public boolean dispatchTouchEvent(MotionEvent ev){
boolean consume =false;
if (onInterceptTouchEvent(ev)){
consume = onTouchEvent(ev);
} else {
consume = child.dispatchTouchEvent(ev)
}
return consume;
}
View需要处理事件呢
- 是否注册setOnTouchListener
- onTouch=false
- onTouchEvent √ 是否注册OnClickListener (enable)
按照步骤,一步一步来,都是前置条件