一.为什么会有事件分发机制
image.png二.三个重要的事件分发的方法
1.dispatchTouchEvent 决定自己处理还是分发给子view
2.onInterceptTouchEvent 父控件下发 如果子控件需要处理,就会进行拦截
3.onTouchEvent
三.事件分发流程
image.png没有消费 就会依次反转 ,最后没人处理才会浪费掉
image.png
伪代码
image.png例子: ScrollView 中嵌套地图控件MapView ,在MapView 外面添加个父控件MyMapView
public class MyMapView extends FrameLayout {
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
//告诉父类 自己消费这次事件,告诉父组件不要拦截(抢走)这次的事件。
getParent().requestDisallowInterceptTouchEvent(true);
} else if (ev.getAction() == MotionEvent.ACTION_UP) {
getParent().requestDisallowInterceptTouchEvent(false);
}
return super.dispatchTouchEvent(ev);
}
public MyMapView(Context context) {
super(context);
}
public MyMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyMapView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
网友评论