1,事件传递机制------源码
2,处理事件的冲突
事件: Activity,View,ViewGroup,Key,
一,View的事件分发
结论:
1, 控件的Listener事件触发顺序是先onTouch,再onClick
2,控件的onTouch返回true,将会onClick事件没有了----组织了事件的传递,
返回false,才会传递onClick事件(才会传递up事件)
源码依据:
View的事件分发。
1,dispatchTouchEvent();
2,onTouchListener----->onTouch方法
3,onTouchEvent
4,onClickListener----->onClick方法
结论:
1,如果onTouchListener的onTouch方法返回了true,那么view里面的onTouchEvent就不会被调用了。
顺序:dispatchTouchEvent-->onTouchListener----return false--->onTouchEvent
2,如果view为disenable,则:onTouchListener里面不会执行,但是会执行onTouchEvent(event)方法
3,OnTouchEvent方法中的ACTION_UP分支中触发onClick事件
oTouchListener--->onTouch返回true,消耗此事件,down,但是up事件是无法到达onClickListener
oTouchListener--->onTouch返回false,不消耗此事件。
二,ViewGroup+View的事件分发。
ViewGroup---->View
1,dispatchTouchEvent()
2,onTouchEvent()
3,onInterceptTouchEvent() 拦截触摸事件
1,先接触事件的父容器
2,顺序:dispatchTouchEvent()-->onInterceptTouchEvent()-->onTouchLinstener----return false----->onTouchEvent