【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )(一)

简介: 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )(一)

文章目录

Android 事件分发 系列文章目录

一、事件分发相关类和方法

二、Activity 的事件传递

1、Activity.dispatchTouchEvent 方法事件传递机制

2、Activity.onTouchEvent 方法事件传递机制

三、ViewGroup 的事件传递

1、ViewGroup.dispatchTouchEvent 方法事件传递机制

2、ViewGroup.onInterceptTouchEvent 方法事件传递机制

3、ViewGroup.onTouchEvent 方法事件传递机制

四、View 的事件传递

1、View .dispatchTouchEvent 方法事件传递机制

2、View .onTouchEvent 方法事件传递机制

五、事件分发示意图

总结





一、事件分发相关类和方法


Android 事件分发涉及到的类有 3 33 个 , Activity , ViewGroup , View ;


Android 事件分发涉及到的如下 7 77 个方法 :


Activity 类涉及到 dispatchTouchEvent , onTouchEvent , 2 22 个方法 ;

public class MainActivity extends AppCompatActivity {

 

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


ViewGroup 涉及到 dispatchTouchEvent , onInterceptTouchEvent , onTouchEvent , 3 33 个方法 ;

public class MyConstraintLayout extends ConstraintLayout {
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return super.dispatchTouchEvent(ev);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev);
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }
}


View 涉及到 dispatchTouchEvent , onTouchEvent , 2 22 个方法 ;

public class MyButton extends androidx.appcompat.widget.AppCompatButton {

 

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






二、Activity 的事件传递



1、Activity.dispatchTouchEvent 方法事件传递机制


事件来源 :


① 驱动层产生触摸事件, 由 WindowManagerService 传递到 Activity



事件分发 :


① 停止传递 : 如果返回 true / false , 说明事件被消费 , 停止传递


② 继续传递 : 如果返回 super.dispatchTouchEvent(ev) , 那么继续向下传递, 按照如下顺序逐层传递 : Activity -> PhoneWindow -> DecorView -> ViewGrope , 最终传递到 ViewGroup, 调用 ViewGroup 的 dispatchTouchEvent 方法


 

/**
     * 该方法是页面事件分发入口
     *
     * 针对 ACTION_DOWN 事件分析 :
     *  事件来源 :
     *      驱动层产生触摸事件, 由 WindowManagerService 传递到 Activity
     *  事件分发 :
     *      如果返回 true / false, 说明事件被消费, 停止传递
     *      如果返回 super.dispatchTouchEvent(ev), 那么继续向下传递, 按照如下顺序逐层传递 :
     *          Activity -> PhoneWindow -> DecorView -> ViewGrope
     *          最终传递到 ViewGroup, 调用 ViewGroup 的 dispatchTouchEvent 方法
     *
     * @param ev
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        return super.dispatchTouchEvent(ev);
    }



目录
相关文章
|
2月前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
2月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
45 1
|
2月前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
2月前
|
Android开发
Android 事件分发机制详细解读
Android 事件分发机制详细解读
44 5
|
4月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
4月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
202 9
|
4月前
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
43 0
|
Android开发
【Android 事件分发】ItemTouchHelper 实现拖动排序(三)
【Android 事件分发】ItemTouchHelper 实现拖动排序(三)
194 0
【Android 事件分发】ItemTouchHelper 实现拖动排序(三)
|
Android开发
【Android 事件分发】ItemTouchHelper 实现拖动排序(一)
【Android 事件分发】ItemTouchHelper 实现拖动排序(一)
560 0
【Android 事件分发】ItemTouchHelper 实现拖动排序(一)
|
Android开发 索引
【Android 事件分发】ItemTouchHelper 实现拖动排序(二)
【Android 事件分发】ItemTouchHelper 实现拖动排序(二)
325 0