事件分发机制详解

2017-12-05  本文已影响5人  Skypew

一.为什么会有事件分发机制

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);
    }

}

上一篇 下一篇

猜你喜欢

热点阅读