8月25日
事件分发
- 事件分发的对象是MotionEvent,通过触摸屏幕和点击按键产生
- 事件分发的组件包括Activity,ViewGroup,View以及硬件驱动。
- 事件传递的方法,Native通过监听,读取dev/input/eventX文件产生新事件,发送给Java层。经过上面提到的组件,主要通过dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()三个方法传递,拦截和消费
- Activity和View没有OnInterceptTouchEvent方法,无需拦截事件
- 在调用子View的dispatchTouchEvent时会判断是否设置了onTouchListener,会回调onTouch方法,返回true则为已经消费了,就不会调用onTouchEvent()的方法及内部的OnClick()方法
- 处理滑动冲突的方式1.外部拦截:由重写父View在onInterceptTouchEvent()根据业务来判断move事件是否要拦截事件,down和up事件不拦截。2. 内部拦截,父View除了down事件都拦截,然后由子View通过requesDisallowInterceptTouchEvent()来控制父类是否要拦截,或者交给子View处理