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.OnTouchListener
或GestureDetector
),它将处理这个事件。 -
ACTION_CANCEL
当触摸事件因为某些原因被取消时触发,例如视图被回收。这个事件会传递到根视图。
-
ViewGroup,先要走分发流程,再走处理流程。View,只能走处理流程
3.事件分发流程
-
判断事件是否拦截,不拦截则分发(只有down事件才分发)。
-
分发或者处理:
-
拦截:相当于你是最后一个,事件到底处不处理。
-
不拦截:进行分发。全部不处理和拦截流程一样。
-
-
判断下属View能否接收事件:
- View是不是可见的(VISIBLE)。
- 是不是具有动画。
相关文章:
View事件分发
MotionEvent 1.简介 MotionEvent 是Android系统中一个非常重要的类,它代表了屏幕上发生的触摸事件。当用户在屏幕上触摸、滑动或者长按时,都会生成一个MotionEvent对象,这个对象包含了触摸动作的各种信息。 2.事件类型 ACTION_DOWN&#x…...
监听页面的使用时间
如果是比较新的vue架构(推荐,参考若依) 监听create()和destory()两个函数,写通用的js调用函数,在路由守卫的时候使用,就可以获取到每个页面停留时间 如果是比…...
【 yolo红外微小无人机-直升机-飞机-飞鸟目标检测】
yolo无人机-直升机-飞机-飞鸟目标检测 1. 小型旋翼无人机目标检测2. yolo红外微小无人机-直升机-飞机-飞鸟目标检测3. yolo细分类型飞机-鸟类-无人机检测4. yolo红外大尺度无人机检测5. 小型固定翼无人机检测6. 大型固定翼无人机检测7. yolo航空俯视场景下机场飞机检测 1. 小型…...
Redis与数据库的一致性
Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时,经常会遇到Redis与数据库的数据一致性问题。简单来说,就是同一份数据同时存在于Redis和数据库,如何在数据更新的时候,保证两边数据的一致性。首先&#…...
使用maxwell实时同步mysql数据到kafka
一、软件环境: 操作系统:CentOS release 6.5 (Final) java版本: jdk1.8 zookeeper版本: zookeeper-3.4.11 kafka 版本: kafka_2.11-1.1.0.tgz maxwell版本:maxwell-1.16.0.tar.gz 注意 : 关闭所有机器的防火墙,同时注意…...
知识图谱与大数据:区别、联系与应用
目录 前言1 知识图谱1.1 定义1.2 特点1.3 应用 2 大数据2.1 定义2.2 应用 3. 区别与联系3.1 区别3.2 联系 结语 前言 在当今信息爆炸的时代,数据成为了我们生活和工作中不可或缺的资源。知识图谱和大数据是两个关键概念,它们在人工智能、数据科学和信息…...
Nagios工具
一 nagios 相关概念 Nagios 是一款开源的免费网络监视工具,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第 一时间通知网站运维人员,在状态恢复后…...
微信小程序全局数据共享
文章目录 安装MobX相关的包根目录创建store文件夹,添加store.js文件绑定到页面中绑定到组件 mobx-miniprogram和mobx-miniprogram-bindings实现全局数据共享 mobx-miniprogram用来创建Store实例对象 mobx-miniprogram-bindings用来把Store中的共享数据或方法&…...
算法训练营第24天|回溯算法理论基础 LeetCode 77.组合
终于把二叉树做完了!开始新的篇章,回溯! 回溯算法理论基础 回溯算法题目分类: 1.组合 2.分割 3.子集 4.排列 5.棋盘问题 什么是回溯? 回溯叫做回溯搜索法,是一种搜索方式。回溯是递归的副产品&…...
pip永久修改镜像地址
修改命令: pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/ 效果: 会在C:\Users\PC(用户名)\AppData\Roaming\pip目录下新增或修改文件pip.ini 文件内容: [global] index-url https://pypi.tuna.tsinghua.e…...
RK3588平台开发系列讲解(硬件篇-功能外设2)
USB2.0/USB3.0 电路 RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。 这些控制器与PHY的内部复用图如下: USB3.0 OTG0 控制器支持SS/H…...
SpringBoot学习记录
SpringBoot是用于加速Spring开发的。 我们先来看看如何使用SpringBoot来创建一个基于Web的程序,可以发现相较于SpringMVC其有巨大改变。 3.开发控制器类 GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println("…...
财富池指标--通达信顾比均线实战指标免费源码
顾比均线是由两组均线构成,短期组为3、5、8、10、12、15。长期组为:30、35、40、45、50、60。顾比均线由澳大利亚的投资家戴若-顾比先生发明,因此叫顾比线。 顾比均线可以广泛运用于股票、期货和外汇交易中,只要是能运用K线图的投…...
AJAX(一):初识AJAX、http协议、配置环境、发送AJAX请求、请求时的问题
一、什么是AJAX 1.AJAX 就是异步的JS和XML。通过AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。 2.XML 可扩展标记语言。XML被设计用来传输和…...
idea常用的快捷键总结:
idea常用的快捷键总结: Ctrl相关的: Ctrl F 在当前文件进行文本查找 (必备) Ctrl R 在当前文件进行文本替换 (必备) Ctrl Z 撤销 (必备) Ctrl Y 删除光标所在行 或 删除选中的…...
LeetCode 热题 100 题解(一):哈希部分
《LeetCode热题 100》 经过了两个多月,终于刷完了代码随想录的题目,现在准备开始挑战热题一百了,接下来我会将自己的题解以博客的形式同步发到力扣和 c 站,希望在接下来的征程中与大家共勉! 题组一:哈希 题…...
C语言 | qsort()函数使用
目录: 1.qsort介绍 2.使⽤qsort函数 排序 整型数据 3.使⽤qsort函数 排序 结构体数据 4. qsort函数的模拟实现冒泡排序 qsort()函数 是一个 C语言编译器函数库自带的排序函数, 它可以对指定数组(包括字符串,二维数组&#x…...
继承的特点 | java
/*Java中继承的特点:A:Java只支持单继承,不支持多继承。 B:Java支持多层继承(继承体系),间接继承 */class Father(){} class Mother(){}class son extends Father(){} // 正确 class son2 extends Father , Mother {} // 不正确 1. Java只支持单继承…...
6、jenkins项目构建类型-项目类型介绍
文章目录 一、自由风格项目1、拉取代码2、演示改动代码后的持续集成二、Maven项目构建三、Pipeline流水线项目构建(☆☆☆)1、Pipeline简介(1)概念(2)使用Pipeline有以下好处(3)如何创建Jenkins Pipeline呢?2、安装Pipeline插件3、Pipeline语法快速入门(1)Declarati…...
指针函数的应用——找出哪些学生有不及格的科目
下面的代码实现了以下功能: 定义了一个函数 getFailStudent,它接收一个指向整数数组的指针,并遍历该数组,查找是否存在不及格的成绩。如果找到了不及格的成绩,就返回指向不及格学生所在行的指针;否则返回 N…...
【微服务】Gateway
文章目录 1.基本介绍官方文档:https://springdoc.cn/spring-cloud-gateway/#gateway-starter1.引出网关2.使用网关服务架构图3.Gateway网络拓扑图(背下来)4.Gateway特性5.Gateway核心组件1.基本介绍2.断言3.过滤 6.Gateway工作机制 2.搭建Gat…...
王道C语言督学营OJ课后习题(课时14)
#include <stdio.h> #include <stdlib.h>typedef char BiElemType; typedef struct BiTNode{BiElemType c;//c 就是书籍上的 datastruct BiTNode *lchild;struct BiTNode *rchild; }BiTNode,*BiTree;//tag 结构体是辅助队列使用的 typedef struct tag{BiTree p;//树…...
Filter、Listener、AJAX
Filter 概念:Filter 表示过滤器,是JavaWeb三大组件(Servlet、Filter、 Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感…...
FastAPI+React全栈开发04 FastAPI概述
Chapter01 Web Development and the FARM Stack 04 Introducing FastAPI FastAPIReact全栈开发04 FastAPI概述 Now we will look at a brief introducion to the Python REST-API framework of choice - FastAPI. Additionally, we will go over a high-level overview of t…...
基于单片机的二维码LCD显示控制设计
**单片机设计介绍,基于单片机的二维码LCD显示控制设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的二维码LCD显示控制设计是一个集硬件、软件与通信于一体的综合性项目。此设计的主要目标是实现单片机…...
Ubuntu20.04下PCL安装,查看,卸载等操作
Ubuntu20.04下PCL安装,查看,卸载等操作 项目来源 https://github.com/PointCloudLibrary/pclhttps://pointclouds.org/documentation/modules.htmlhttps://pcl.readthedocs.io/projects/tutorials/en/master/ 点云学习: https://github.c…...
Android TargetSdkVersion 30 安装失败 resources.arsc 需要对齐且不压缩。
公司项目,之前targetSDKVersion一直是29,近期小米平台上架强制要求升到30,但是这个版本在android12上安装失败,我用adb命令安装,报错如下图 adb: failed to install c: Program Files (x86)(0A_knight\MorkSpace \Home…...
c++20中的jthread再谈
一、介绍 在前面的C20新功能中,简单的介绍过相关的std::jthread的应用。当时觉得它虽然比std::thread方便一些,但也没有多大的优势。可在后面的不断的学习中,发现std::jthread的使用上确实有优秀之处,相对于传统的线程编程&#…...
Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景! FastGPT是非常实用并且相当厉害的个人知识库AI项目,项目是非常…...
Rust 实战练习 - 7. FFI, 库, ABI, libc
FFI FFI(Foreign Function Interface)是这样一种机制:用一种编程语言写的程序能调用另一种编程语言写的函数(routines)。 调用约定,类型表示和名称修饰这三者的统称,即是众所周知的应用二进制…...
东营建设网站公司电话/免费拓客软件排行榜
jpa和hibernate本教程的前半部分介绍了Java Persistence API的基础知识,并向您展示了如何使用Hibernate 5.3.6和Java 8配置JPA应用程序。如果您已阅读该教程并研究了其示例应用程序,那么您将了解在JPA中建模JPA实体和多对一关系。 您还进行了一些使用JPA…...
wordpress评论表情插件/网站seo技术能不能赚钱
前言:通过使用视图(views)可以获得其他实现了Collection接口和Map接口的对象。映射类的keySet方法就是一个示例。keySet方法返回一个实现Set接口的类对象,这个类的方法对原映射进行操作。这种集合称为视图。 1、轻量级集合包装器…...
重庆搜索引擎优化/厦门seo排名
Jenkins项目团队决定在稳定性和为Kubernetes等平台提供更好的支持方面分配一些工作量。前者可能会发生一些向后不兼容的变更,将影响发布模型并提供具有更多预置选项的版本,而后者将在与现有Jenkins X项目齐头并进。\u0026#xD;\u0026#xD;Jenkins目前在处理…...
在制作网站前 不需要急于做的工作是/优化网站广告优化
我们知道,很多程序都直接文件拖放。例如常见的Excel,Word等等。如果要为我们自己的应用程序添加文件拖放到支持,那么可以按照如下的一些步骤完成 1. 设置窗体的allowdrop属性为true 2. 编写两个事件:DragEnter和DragDrop 以下是我…...
网站建设需要敲代码吗/前端开发培训机构推荐
在使用modelsim仿真DDR2时,一般我们会用美光网站上下载的DDR2仿真模型。仿真模型文件一般有ddr2_module.v,ddr2.v,ddr2_mcp.v,ddr2_parameters.vh,subtest.vh,在电子论坛上下载的,一般还会带有t…...
徐州网站开发怎样/b站推广入口2023破解版
本文实例讲述了python基于queue和threading实现多线程下载的方法,分享给大家供大家参考。具体方法如下:主代码如下:#download workerqueue_download Queue.Queue(0)DOWNLOAD_WORKERS 20for i in range(DOWNLOAD_WORKERS):DownloadWorker(qu…...