Android 事件分发机制

    xiaoxiao2021-04-16  28

    最近在准备面试,所以重新学习总结一下面试时一些概率性出现的问题。今天学习总结的是Android的事件分发机制,我是通过该视频学习的,分享给有需要的小伙伴~

    学习笔记:

    最常见的几个触摸事件:ACTION_DOWN、ACTION_MOVE、ACTION_UP ...

    事件分发的顺序:从父到子,即从Activity-->Layout-->控件,由外向内

    事件消费(处理)顺序:从子到父,即从控件-->Layout-->Activity,由内向外,如果控件不做消费,Layout不做消费,那最后的消费就由Activity处理

    附:(来源)

    事件分发核心的几个方法:

    方法1:分发触摸事件

    @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev);//注意:这里不能直接返回true或false,否则onTouchEvent()不执行 }

     

    方法2:触摸事件处理(消费方法)

    @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }

     

    方法3:拦截触摸事件

    @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); }

    其中方法1和2在Activity、View、ViewGroup中都有,但是方法3只有ViewGroup中有

     

    事件分发的用处:自定义分发的顺序,解决事件冲突

    例如:ScrollView和ListView的冲突,我们可以这样做:

    1.重写ListView的onInterceptTouchEvent()并返回true

    2.重写ListView的onTouchEvent并在返回前调用下方的方法,告知父控件,不想它拦截自己的方法

    getParent().requestDisallowInterceptTouchEvent(true);

     

     

    转载请注明原文地址: https://ju.6miu.com/read-672484.html

    最新回复(0)