View事件分发

MotionEvent

1.简介
  • MotionEvent 是Android系统中一个非常重要的类,它代表了屏幕上发生的触摸事件。
  • 当用户在屏幕上触摸、滑动或者长按时,都会生成一个MotionEvent对象,这个对象包含了触摸动作的各种信息。
2.事件类型
  • ACTION_DOWN:手指初次接触到屏幕时触发,这是触摸系列中的第一个事件。

  • ACTION_UP:手指离开屏幕时触发,这是触摸系列中的最后一个事件。

  • ACTION_MOVE:手指 在屏幕上滑动时触发,会多次触发。如果一个视图已经处理了 ACTION_DOWN,它将连续接收到 ACTION_MOVE 事件,直到用户抬起手指。

  • ACTION_POINTER_DOWN: 当用户在屏幕上按下第二个或第三个手指时触发。这个事件包含了一个 actionIndex 参数,用于区分是哪个触点的动作。

  • ACTION_POINTER_UP:当用户抬起第二个或第三个手指时触发。同样,这个事件也有一个 actionIndex 参数。

    事件中有Pointer的概念,一个pointer就代表一个触摸点,每个pointer都有自己的事件类型,也有自己的横轴坐标值。

  • ACTION_CANCEL:事件被上层拦截时触发。

  • ACTION_OUTSIDE: 当触摸事件发生在视图的边界外时触发。

事件分发

1.核心方法
  • dispatchTouchEvent

    • 是ViewGroup中的一个非常重要的方法,它负责分发触摸事件。
    • 当一个触摸事件发生时,首先由dispatchTouchEvent方法处理。
    • 这个方法会根据事件类型以及视图层次结构(View树)的布局,决定是否消费这个事件,以及是否将事件传递给子视图。
    • 返回值表示是否消费了当前事件。(返回true表示事件被消费,本次的事件终止。返回false表示View以及子View均没有消费事件,将调用父View的onTouchEvent方法)
    public boolean dispatchTouchEvent(MotionEvent event)
    
  • onInterceptTouchEvent

    • 用于在ViewGroup中决定是否拦截触摸事件,即是否要在子视图中处理这个事件。
    • 这是ViewGroup特有的方法。
    • 这个方法在dispatchTouchEvent中被调用,在决定是否传递给子视图之前执行。
    • 返回true表示拦截了事件,那么事件将不再向下分发而是调用View本身的onTouchEvent方法。
    • 返回false表示不做拦截,事件将向下分发到子View的dispatchTouchEvent方法。
    public boolean onInterceptTouchEvent(MotionEvent ev)
    
  • onTouchEvent

    • 是View类的方法,用于处理具体的触摸事件。
    • 对于一个ViewGroup,当它决定拦截一个触摸事件并自行处理时,它会调用子视图的onTouchEvent方法。
    • 如果onTouchEvent返回true,表示事件被消耗;如果返回false,表示事件未被消耗,会继续传递给父视图(调用父View的onTouchEvent方法)或其他相关视图。
    public boolean onTouchEvent(MotionEvent ev)
    

2.不同事件类型的传递方式
  • ACTION_DOWN

    当用户触摸屏幕时触发。这是触摸序列的开始。MotionEvent 从触摸的视图开始,沿着视图树向下传递,直到找到一个消费事件的视图。如果没有任何视图消费这个事件,它最终会被传递到根视图。

  • ACTION_UP

    当用户抬起手指时触发。这是触摸序列的结束。与 ACTION_DOWN 类似,MotionEvent 从触摸的视图开始,沿着视图树向下传递,直到找到一个消费事件的视图。

  • ACTION_MOVE

    当用户在触摸屏上移动手指时触发。这个事件会传递给当前焦点视图,如果焦点视图是一个可以接收触摸事件的视图(如 View.OnTouchListenerGestureDetector),它将处理这个事件。

  • ACTION_CANCEL

    当触摸事件因为某些原因被取消时触发,例如视图被回收。这个事件会传递到根视图。

  • ViewGroup,先要走分发流程,再走处理流程。View,只能走处理流程

3.事件分发流程

  • 判断事件是否拦截,不拦截则分发(只有down事件才分发)。

  • 分发或者处理:

    • 拦截:相当于你是最后一个,事件到底处不处理。

    • 不拦截:进行分发。全部不处理和拦截流程一样。

  • 判断下属View能否接收事件:

    • View是不是可见的(VISIBLE)。
    • 是不是具有动画。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/578767.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金融案例:构建高效统一的需求登记与管理方案

在金融行业数字化转型背景下,银行等金融机构面临着业务模式创新与数据应用的深度融合。业务上所需要的不再是单纯的数据,而是数据背后映射的业务趋势洞察,只有和业务相结合转化为业务度量指标,经过数据分析处理呈现为报表进行展示…

在遭受攻击时如何有效监测服务器流量峰值——实战指南

引言 在网络安全领域,分布式拒绝服务攻击(DDoS)是一种常见的针对服务器及网络资源的恶意行为,它通过短时间内发送大量无效请求,导致服务器不堪重负而无法正常服务合法用户。当服务器遭受攻击时,快速识别并…

FANUC机器人故障诊断—报警代码更新(三)

FANUC机器人故障诊断中,有些报警代码,继续更新如下。 一、报警代码(SRVO-348) SRVO-348DCS MCC关闭报警a,b [原因]向电磁接触器发出了关闭指令,而电磁接触器尚未关闭。 [对策] 1.当急停单元上连接了CRMA…

Windows Podman安装

一、podman 简介 Podman:用于管理 OCI 容器和 Pod 的工具 Podman: A tool for managing OCI pods Podman(POD MANager) 是一个用于管理容器和映像、挂载到这些容器中的卷以及由容器组组成的 pod 的工具。Podman 在 Linux 上运行容器&#xff…

站群文章生成器

在网站运营和SEO优化过程中,内容的质量和数量是至关重要的。站群是一种常见的SEO手段,通过创建多个相关性较强的网站,以提高整体的曝光度和排名。然而,为这些网站生成大量原创文章是一项繁琐的任务。为了应对这一挑战,…

【linux课设】自主实现shell命令行解释器

shell和bash的关系 shell是命令解释器,它接收用户的命令并将其传递给内核去执行。bash,即GNU Bourne-Again Shell,是shell的一种实现方式,也是大多数linux系统下默认的shell。 bash的原理 大多数的指令进程(除了内建命令&#…

若依ruoyi-vue实现excel导入导出

文章目录 Excel注解excel数据导入前端实现后端实现 下载模板前端实现后端实现 excel数据导出前端实现后端实现 自定义标题信息导出用户管理表格新增标题(用户列表)导入表格包含标题处理方式 自定义数据处理器自定义隐藏属性列导入对象的子对象导出对象的…

《Linux运维实战:达梦DM8数据库之基本操作》

一、创建表空间 1.1、使用客户端工具创建 1、使用 SYSDBA 用户登录 DM 管理工具。右键表空间模块,点击【新建表空间】,如下图所示: 2、可根据项目需要,修改表空间文件、路径、大小、是否自动扩充、扩充上限等信息,如下…

2024最新华为OD机试试题库全 -【两个字符串间的最短路径问题】- C卷

1. 🌈题目详情 1.1 ⚠️题目 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 “ABCABBA”,B字符串为 “CBABAC” 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同,DISCUZ 可以允许分类下面还有分类,再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话,系统会提示错误: 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

数据结构:单调栈和单调队列

文章目录 一、单调栈1.1、栈的思想1.2、单调栈1.2.1、单调栈的基本应用:找出数组中每个元素右侧第一个更大的元素1.2.2、单调栈的基本应用:找出数组中每个元素左侧第一个更大的元素1.2.3、单调栈拓展1.2.4、单调栈LeetCode题单 二、单调队列2.1、队列的思…

大电流电感的作用和特点

大电流电感又称为高功率电感,一般是指绕线型电感, 一、主要作用 1.在低频时,起蓄能和滤高频; 2.在高频时,它的阻抗特性表现的很明显。有耗能发热,感性效应降低等现象。 简单来说就是对交流信号进行隔离、…