事件分发机制
WHY
当一个按钮同时添加了onClick和onTouch事件,它会怎样执行?
通过一个简单的demo,我们很容易得到答案,先执行onTouch事件,再执行onClick事件。如果将修改onTouch的返回值修改为true,onClick事件可能会被拦截。
为啥会这样哦.....
在事件分发的处理方法中,其中最主要的就是这三个方法:dispatchTouchEvent()
,onInterceptTouchEvent()
,onTouchEvent()
。
其中dispatchTouchEvent中包含onInterceptTouchEvent和onTouchEvent方法。
源码简化后如下。
当一个button同时注册了onClick和onTouch,当onTouch中的返回值为true时,相当于mOnTouchListener.onTouch(this, event)返回true,因此dispatchTouchEvent直接return true。
2016/05/23