美文网首页
事件分发机制详解

事件分发机制详解

作者: Skypew | 来源:发表于2017-12-05 14:08 被阅读5次

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

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

}

相关文章

网友评论

      本文标题:事件分发机制详解

      本文链接:https://www.haomeiwen.com/subject/hmgqixtx.html