类似淘宝首页滑动分析

2023-05-10  本文已影响0人  我要离开浪浪山

1、单点触摸

根据面向对象思想,事件被封装成 MotionEvent 对象

事件 简介
ACTION_DOWN 手指 初次接触到屏幕 时触发
ACTION_MOVE 手指 在屏幕上滑动 时触发,会会多次触发
ACTION_UP 手指 离开屏幕 时触发
ACTION_CANCEL 事件 被上层拦截 时触发

手指落下(ACTION_DOWN) -> 移动(ACTION_MOVE) ->离开(ACTION_UP)

2、多点触摸

多点触控( Multitouch,也称 Multi-touch ),即同时接受屏幕上多个点的人机交互操作,多点触控是从 Android 2.0 开始引入的功能

事件 简介
ACTION_DOWN 第一个 手指 初次接触到屏幕 时触发
ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发
ACTION_UP 最后一个 手指 离开屏 时触发
ACTION_POINTER DOWN 有非主要的手指按下(即按下之前已经有手指在屏幕上)
ACTION _POINTER UP 有非主要的手指抬起(即抬起之后仍然有手指在屏幕上).
以下事件类型不推荐使用 一以下事件在 2.2 版本以上被标记为废弃一-
ACTION_POINTER 1 第 2 个手指按下,已废弃,不推荐使用
DOWNACTION _POINTER 2 第 3个手指按下,已废弃,不推荐使用。
DOWNACTION_POINTER 3 第 4 个手指按下,已废弃,不推荐使用。
DOWNACTION POINTER 1 第 2 个手指抬起,已废弃,不推荐使用。
UPACTION POINTER 2 第 3个手指抬起,已废弃,不推荐使用
UPACTION POINTER 3 UP 第 4 个手指抬起,已废弃,不推荐使用

3、手势

6930002b33d03e0043c6996cbf86394.png

4、 Android页面View的体系结构

c115ec08f8debfa86cd46e60ec3f71a.png

5、事件的处理函数

类型 相关方法 Activit ViewGroup View
事件分发 dispatchTouchEvent
事件拦截 onlnterceptTouchEvent
事件消费 onTouchEvent 是或否

6、事件分发的大致流程

91d678413c550a724cad72022fbada3.png

7、事件消费的大致流程

494534357311d5cdcf9012c9b6d13c2.png

8、事件分发代码

 public boolean dispatchTouchEvent(MotionEvent ev) {
        boolean result = false; // 默认状态为没有消费过
        if (!onInterceptTouchEvent(ev)) {  // 如果没有拦截交给子View
            result = child.dispatchTouchEvent(ev);
        }
        if (!result) { // 如果事件没有被消费,询问自身onTouchEvent
            result = onTouchEvent(ev);
        }
        return result;
    }
29dd2a0688714bcd84986ac0e0c7ba4.png

9、View dispatchTouchEvent

aa797155323c1b5534ec749e5c87438.png
上一篇下一篇

猜你喜欢

热点阅读