Android 事件分发机制
- view的onTouch执行先于onClick,如果同时定义了OnTouchListener和OnClickListener,OnTouch会优先执行,如果onTouch返回true,OnClick就不会执行了,OnTouch返回false,OnClick就会执行
- 事件分发流程:activity->viewgroup->view
- View group 处理分发是根据出发事件坐标点循环viewgroup子控件,判断子控件是否在范围内,如果是进入view的分发事件;PS:如果通过继承viewgroup自定义控件通过实现拦截函数可以控制事件是否向下传递,view 没有拦截方法
- onTouchEvent 返回true,代表事件被消费了,返回false,说明未被消费,如果给一个按钮同时设置了TouchListener和OnClickListener,如果onTouch方法返回true,则onClick不会被执行
- 如果自定义viewgroup,实现了onInterceptTouchEvent返回true,则事件不会向子view继续传递,而是直接进入viewgroup的onTouchEvent
- 如果down 事件返回false,那么后续事件(move,up)不会被继续分发;
-
viewgroup的子view的dispatchTouchEvent方法,如果没有对子view添加TouchListener或者OnclickListener,则dispatchTouchEvent 返回true 不会执行onTouchEventonTouchEvent 返回false的情况就是给控件设置了enable为false