android View touch的传递流程

android touch事件传递/inputflinger流程分析 由于项目需要,需要了解下android touch数据的传递流程,看了下代码后把过程记录下来,方便后面查阅。 本文章基于Android11开源源码,所有代码均可以在aosp官方提供的地址去查阅下载,Android11具体流程可能和其他Android版本有点不一致, 如果文中有不对的地方欢迎同学们指出一起讨论交流~ 从4条线(4个方向)来分析android 的touch 数据传送机制,沿途主要关注touch数据从kernel出来到app的路线,把这条路打通,不关注细节,以及touch数据是如何决定给到哪 阅读详情


1. ViewRootImpl    :deliverPointerEvent()

2. PhoneWindow$DecorView   :dispatchTouchEvent()

3. Activity   :dispatchTouchEvent()

4. PhoneWindow   :superDispatchTouchEvent()

5. PhoneWindow$DecorView   :superDispatchTouchEvent()

6. ViewGroup   :dispatchTouchEvent()

7.ViewGroup   :dispatchTransformedTouchEvent()

8. ViewGroup   :dispatchTouchEvent()


-> a.如果该层view容器没有事件拦截   :onInterceptTouchEvent() == false 走下面拦截的逻辑@no_intercept 

-> b.如果该层view容器有事件拦截   :onInterceptTouchEvent() == true 走下面拦截的逻辑@intercept 


==================================@no_intercept ========================================

9. 延续第7 ~ 8步,遍历传递。

10. View   :dispatchTouchEvent()

11. View   :onTouchEvent()



====================================@intercept =========================================

9. 容器view   :onInterceptTouchEvent()

10. ViewGroup   :dispatchTransformedTouchEvent()

11. View   :dispatchTouchEvent()

12. View   :onTouchEvent()


三个方法在view视图被touch的情况下:

dispatchTouchEvent()调用的时机:整个view体系保持通路的情况下,每次都调用。 有一层view dispatchTouchEvent返回false,短路。则之后整个view体系不会再调用此方法。

onInterceptTouchEvent()调用时机:整个view体系保持通路的情况下,action_down时,mFirstTouchTarget != null 时。返回true拦截了mFirstTouchTarget 会置空,则之后再也不会调用此方法。

onTouchEvent()调用时机:

整个view体系保持通路的情况下,view类总会被调用。 

viewGroup容器类:a. 如果子View onTouch()返回false没处理(mFirstTouchTarget 没赋值==null),会调用本层的onTouch();

b. 本层拦截了事件(mFirstTouchTarget 没赋值==null)。会调用本层的onTouch();


注:

dispatchTouchEvent 返回false,则系统下次不会再调用此方法。没有传递成功,则系统认为此事件无需再处理了。

什么情况下 返回false:

1. 有targetView(有childView在点中区域), targetView dispatchTouchEvent() / onTouchEvent() 返回 false; 

2. 无targetView(无childView在点中区域,或根本无childView), 当前view  onTouchEvent() 返回 false; (是否clickable ,long_clickable)



Android Touch事件传递机制全面解析(从WMS到View树) 转眼间近一年没更新博客了,工作一忙起来,很难有时间来写博客了,由于现在也在从事Android开发相关的工作,因此以后的博文也会更多地专注于这一块。 这篇文章准备从源码层面为大家带来Touch事件的传递机制,我这里分析的源码时Android4.4的。说到分析源码,光看肯定是不行的,一定要亲自去跟,并且要边跟边思考,所以在下一篇中,会有一个Demo来为大家详细分析源码的走向。 阅读详情

相关推荐

Android 安卓Touch事件的分发流程解析

用户触摸屏幕产生一个触摸消息,系统底层将该消息转发给ViewRoot ( ViewRootImpl ),ViewRoot产生一个DISPATCHE_POINTER的消息,并且在handleMessage中处理该消息,最终会通过deliverPointerEvent(MotionEvent event)来处理该消息。

m0_71524094的博客 974

android触摸事件透传,Android中父View穿透子View响应长按事件

释放双眼,带上耳机,听听看~!需求在实际项目开发中,有这样的需求,长按整个ViewGroup响应长按事件,例如长按弹出对话框或者popwindow等等问题针对这个需求出现两种情况:1,当ViewGroup中无任何子view的时候,长按事件按压ViewGroup任何位置都可以响应.2,当ViewGroup中有子view的时候,例如包含TextView,长按子view的时候,就无法响应ViewGrou...

weixin_42149145的博客 2114

Android 进阶——Framework 核心之Touch事件分发机制详细攻略(一)

Android 事件事件分发的对象、处理事件的对象、事件分发的流程四、事件分发的原理 引言 一般说来所有事件的本质都是由驱动打通硬件屏幕和操作系统的输入总线的,当手指去点击或者按下屏幕时都会产生对应的信号,由驱动往操作系统上传递,并提供对应的监听和响应机制,这也是为什么MotionEvent需要继承native 层InputEvent(其...

最美不过,心中有梦,身旁有你! 4243

android view touch,Android View Touch事件传递机制

1.Android View Touch事件组成(1)事件响应Android事件分为点击,长按,拖动,滑动等,状态主要是由ACTION_DOWN(按下), ACTION_MOVE(移动), ACTION_UP(抬起)组成。事件必须是由ACTION_DOWN触发,才能有后面一系列的事件响应。(2)View与ViewGroup有哪些方法响应事件查看源码可以知道,View与ViewGroup主要几个事件...

weixin_28965077的博客 421

带你全面解析Android框架体系架构view篇

人生困难重重,在漫长而艰辛的前行路上,坚持不懈、脚踏实地的“低头拉车”固然重要。但认清形势、找准目标的“抬头看路”也很关键,甚至决定着你能否达到成功彼岸。只寻求远方的梦想,而不付出当下的努力,那是迷梦;只知道埋头苦干,而不认清方向,那是徒劳。 总结面试必备技能和自己的一些感想学习路线图 更多完整项目下载。未完待续。源码。图文知识后续上传github。 可以点击关于我 联系我获取 一.vi...

Android_SE的博客 1039

Android判断touch事件点是否在view范围内的方法

主要介绍了Android判断touch事件点是否在view范围内的方法,涉及Android事件响应与view属性操作的相关技巧,需要的朋友可以参考下

Android View体系之Touch事件传递源码解析(8.0)

技术背景 从 View 体系中认识 Touch 事件传递,暂时留一条线索: " View 最原始的事件从哪里来? ” 从 WindowCallbacKWrapper开始的。 那么,我们开始吧! tip:阅读源码前,建议读懂Android View体系之基础常识及技巧。 千里之行,始于Activity 从window层开始下发事件后,Activity开始处理事件,会调用ViewGroup#dispatchTouchEvent Activity.java ...

a2923790861的博客 757

【NAS for PVE _04】安装TrueNAS

前篇说到如何调试 Proxmox VE 8.2 为安装虚拟机做准备,本篇主要讲述如何在 Proxmox VE 上安装 TrueNAS 系统,并开启NFS供其他系统挂载使用官网下载好TrueNAS系统镜像。

村口王师傅。 6144

android View 系统 touch 事件处理

android View 系统 touch 事件处理这篇文章总结一下 android View 系统 touch 事件处理,View 系统对 touch 事件的处理包含两部分 1. View 对 touch 事件的处理 2. ViewGroup 对 touch 事件的处理 除了上述两点,touch 事件的处理还有一个很重要的知识点就是 touch 事件的分发

分享美好的专栏 1199

UFS Host Controller工作流程

contentsUFS架构图HCI接口架构传输请求接口(Transfer Request Interface)UFS 主机控制器寄存器接口(host controller Interface)UTP 层数据传输Host Software与Host Controller的交互Host Controller初始化配置与控制CRYPTOCFG 配置过程 该文档描述了UFS Host Controller的主要运作流程以及在开源内核代码hisi平台中的host controller的接口函数设计 文档大部分内容参

Frank_sample的专栏 1万+

通义万相Wan2.1模型Lora训练以及推理

使用DiffSynth-Studio进行通义万象Wan2.1的Lora训练和推理

qq_64858624的博客 4604

Android多层View点击穿透问题

Activity 布局中View1覆盖了View2,View2中有Button点击事件,当View1显示时,点击View1会相应View2的Button点击事件, 解决方案:View1  android:clickable="true" android:focusable="true"...

wo122282967的博客 5156

catia之车灯设计——灯玻加厚之后(单层灯玻、多层灯玻的设计)

加厚完A面后如果主机厂没有给其他的面我们该怎么做?

qq_19829077的博客 1304

Android touch事件传递及View的绘制流程

touch事件传递的三个重要方法dispatchTouchEvent(MotionEvent ev)方法用于事件的分发,当事件传递给当前View时,会被调用,返回值受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件 /** * ViewGroup * @param ev * @return

Bug不知所起,一往而深。 834

基于图像形态学处理的交通灯检测识别matlab仿真

图像形态学处理是基于数学形态学的理论,利用结构元素(如矩形、圆形等)对图像进行处理,通过将结构元素与图像进行特定的逻辑运算,来提取图像中的目标特征、去除噪声、改善图像质量等。在交通灯检测识别中,主要利用交通灯的颜色、形状等特征,通过形态学操作突出这些特征,抑制背景和噪声干扰,从而实现对交通灯的准确检测和识别。图像采集与预处理采集:通过安装在车辆或道路上的摄像头获取交通场景图像。灰度化:将彩色图像转换为灰度图像,减少数据量,便于后续处理。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 160

ANSYS WORKBENCH——参数化建模以及参数优化(结果导出为Excel)

目录 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 ​ 注:印记面的创建 5、模型属性设置 注:设置优化目标 6、回主界面,选择direct optimization模块 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 至此参数化建模就已经完成啦 注:印记面的创建 印记面一般是一个虚拟的区域,参与实际的网格划分,但是只是由于载.

python_AI_fans的博客 1万+

android界面传递方法,android之View Touch事件的传递流程

android应用界面的布局如下图所示,一般我们在展示一个界面时会使用一个Activity表示;而Activity时通过Window展示的,android的Window实现类叫PhoneWindow;PhoneWindow类有个mDecor的DectorView全局变量,用来对界面的View元素进行修饰;DectorView用来修饰ActionBar、ContentView(Activity.se...

weixin_36462532的博客 286

游戏大厂射击游戏无缝大世界游戏DS服务器架构设计方案详解

摘要: 本文深入解析游戏大厂无缝大世界射击游戏的分布式服务器(DS)架构设计方案。以《和平精英》《量子特攻》为例,阐述如何通过动态分区、兴趣管理、弹性扩缩等核心技术应对高并发、低延迟、无缝切换等挑战。架构分为世界协调层、分区计算层、物理判定层等模块,结合微服务化、快照同步和Kubernetes调度,实现玩家跨区无感知迁移与一致判定。重点优化动态负载均衡、状态同步算法及容灾备份,依托分布式数据库与多云部署保障高可用性,为同类游戏提供可扩展的技术范本。(149字) 关键词: 无缝大世界、分布式服务器、动态分区、

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 563

android之View Touch事件的传递流程

android应用界面的布局如下图所示,一般我们在展示一个界面时会使用一个Activity表示;而Activity时通过Window展示的,android的Window实现类叫PhoneWindow;PhoneWindow类有个mDecor的DectorView全局变量,用来对界面的View元素进行修饰;De...

weixin_34321977的博客 106

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

View事件的传递之一_单独看Button的传递

Android中Touch事件

szxgg的专栏 769

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android 触摸事件(Touch)的传递机制

Touch 事件的传递机制 一个完整的touch 事件,由一个 down 事件、n 个 move 事件,一个 up 事件组成. Touch 事 件 一 般 的 传 递 流 程 Activity-->window(唯一实现类是PhoneWindow)-->顶级View(DecorView)-->ViewGroup-->View 监 听 Touch 事 件 有 两 种 方 式 : [方式1]setOnTouchListener [方式2]直 接 重 写 三 个 方 法(d

残风乱了温柔的博客 4331

Android TouchEvent的传递

今天做了一些关于Android Touch时间的传递机制的研究,研究的结果是: 1. 点击事件是可以穿透View的;如果置于表层的View没有处理该事件,则被覆盖的View是可以接收到这个事件的。因为,屏幕上我们所创建的View,都是屏幕的根容器的Child。而ViewGroup在dispatchTouchEvent时,会将事件依次传递给各个Child。 2. 可以发现,dispatc

小罗的专栏 1103

Android的View 事件传递

欢迎转载,请附出处:1、基础知识(1) 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多指触摸)等。(2) 事件类型分为 ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每个事件都是以 ACT

Android developer. 1292

view的事件传递机制

下面进入正题,先来看下Android中事件的分类: 1、键盘事件:主要是指按下虚拟键盘的某个按键、或者机身的物理按键时产生的事件。 2、鼠标事件:Android4.0之后增加了对鼠标事件的监控,如ACTION_HOVER_ENTER。 3、触摸屏事件:凡是触摸屏幕而产生的事件都是触摸屏事件,触摸屏事件包括很多,比如单点触控、多点触控)、轨迹球事件等。 我们这里主

B1ueKid的博客 789
上一篇: android View draw方法传递流程
下一篇: android 中view 的OnTouchListener和OnClickListener的区别
javalive09
博客等级 码龄16年 43粉丝 281原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值