View的Touch事件分发简要流程

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

流程简介:

首先:

  ViewGroup调用dispatchTouchEvent开始分发消息;

其次:

如果是MotionEvent.ACTION_DOWN或存在mFirstTouchTarget,需要判断是否拦截消息onInterceptTouchEvent
1.如果拦截消息:
/有mFirstTouchTarget,改为MotionEvent.ACTION_CANCEL,发送终止消息给child处理
–
\没有mFirstTouchTarget,调用super.dispatchTouchEvent自己处理(在dispatchTransformedTouchEvent中传空参数),调用onTouchEvent
2.如果没有拦截:
分发给child处理:
/如果child处理了,设置mFirstTouchTarget,自身不再调用onTouchEvent处理
–
\如果child没有处理,mFirstTouchTarget为空,调用super.dispatchTouchEvent自己处理(在dispatchTransformedTouchEvent中传空参数),调用onTouchEvent

如果既不是MotionEvent.ACTION_DOWN,也不存在mFirstTouchTarget,则直接拦截消息,由分发者自己处理

函数

dispatchTouchEvent : 返回消息是否被处理

Compose 中的 touch 事件 pointerInput 为 Compose 中处理所有手势事件的入口,可以编写自己的手势处理程序来自定义手势。和原生开发中的 touch 事件一样,经由抵达以及实际根 View 的DecorView。经由 ViewGroup 的分发抵达 Compose 最上层的的。将转化为类型并交由处理。处理过程中先调用的记录 touch 事件的分发路径。接着调用执行分发,并按照两个步骤抵达 Compose 的各层 Node:步骤一:首先调用进行Initial和Main策略的事件分发。这其中会调用各。 阅读详情

相关推荐

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

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

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

View的touch事件分发过程

有的时候,在自定义view的时候,在处理触摸事件的时候,总会有点问题:onTouch和onTouchEvent到底有什么不一样,还有就是一个View的所有的触摸事件,到底是怎么进行分配的呢? 今天,我们带着疑问,来一探究竟:首先,来看一个现象:view.setOnClickListener(new View.OnClickListener() { @Override

Justh 619

【Android】言简意赅的View分发机制

言简意赅的View分发机制一、基础概念1、View树2、Touch事件二、分发流程1、Activity#dispatchTouchEvent源码2、ViewGroup#dispatchTouchEvent源码步骤一:判断当前ViewGroup是否要拦截事件Focus oneFocus twoFocus three步骤二:ViewGroup不拦截事件,继续向下遍历。Focus oneFocus two步骤三:最终判断是否有子View响应Touch事件三、总结 页面的布局是由ViewGroup或View叠加的显

兜哥的博客 512

View的Touch事件的分发系列-(1)ACTION_DOWN事件分发流程分析

在Android开发的知识体系中,其中View体系尤为重要,我们在平常的开发当中,无处不是View,很多人曾经都遇到过可滑动View嵌套的冲突问题,回想一下之前都是怎么处理的呢。还有一些在平常开发过程中需要去自定义开发的手势滑动交互的View,比如Android sdk提供了横向滑动的ViewPager,但是实际开发中,可能有垂直滑动的ViewPager的需求,如果我们自己开发,肯定离不开View...

HYM BLOG 1013

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

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

m0_71524094的博客 975

Augustus手动安装教程

本文记载了如何结合conda手动安装Augustus

m0_65437087的博客 1258

View的Touch事件分发流程

概述View的Touch事件分发大致分为两个过程: 从上向下的分发过程,调用的是dispatchTouchEvent()。 从下向上的处理过程,调用的是onTouchEvent()。

howard_90的专栏 610

智能车轮腿组‘定点排雷’科目全解析:从雷区识别到姿态控制

本文深入解析了智能车竞赛轮腿穿越组‘定点排雷’科目的核心技术。从构建鲁棒的视觉识别系统,到融合编码器与IMU进行厘米级定位,再到实现框内高精度旋转的姿态控制,提供了一套完整的从感知到执行的闭环技术方案,助力参赛队伍攻克这一高难度科目。

weixin_29161719的博客 640

Android面试题——Android中View,SurfaceView和GLSurfaceView

View:显示视图,内置画布,提供图形绘制函数,触屏事件,按键事件函数;必须在UI线程中更新画面,速度较慢。 SurfaceView:基于View视图进行拓展的视图类,更适合2D游戏的开发;是View的子类,类似双缓机制,在新的线程中更新画面,所以刷新界面速度比View快。(双缓机制:即前台缓存和后台缓存,后台缓存计算场景、产生画面,前台缓存显示后台缓存已画好的画面。) GLSurface

tang_js的博客 1664

Java实战:用Proj4j搞定WGS84与CGCS2000坐标互转(附完整代码)

本文详细介绍了如何使用Java库Proj4j实现WGS84与CGCS2000坐标系之间的高精度转换。通过七参数转换模型和格网改正量文件,提供完整的代码实现和项目配置指南,帮助开发者快速集成到地理信息系统项目中,提升坐标转换效率和精度。

weixin_29251567的博客 829

DDR ECC错误注入与寄存器配置实战指南

本文详细介绍了DDR ECC错误注入的核心价值与实战操作指南,包括通过FI_Dx和FI_ECC寄存器注入数据与ECC错误的方法。文章提供了环境准备、寄存器配置、错误检测及系统可靠性测试策略,帮助开发者验证内存系统的纠错能力和可靠性,提升硬件开发的稳定性与效率。

nnn11的博客 1104

View Touch事件分发机制

前言 首先,此文章主要讲解View的Touch事件分发机制,旨在弄清楚事件分发的主要原理,因此,观其大略而不拘泥技术细节。 总览 Touch事件的分发,围绕着dispatchTouchEvent() 、onInterceptTouchEvent()、onTouchEvent()做文章,弄清楚三者的触发时机,也就弄清楚了机制。 dispatchTouchEvent(); onInterc

蝴蝶的博客 416

使用 Simulink + Simscape Electrical 实现一个变压器耦合式单相全波整流器的仿真模型

本文介绍了基于Simulink的变压器耦合式单相全波整流器建模与仿真方法。详细说明了从项目创建、模块添加、电路搭建到参数配置的完整建模过程,重点分析了整流器的效率与损耗特性,包括变压器损耗和二极管导通损耗。通过仿真展示了输入输出波形特征,并提出了选用高效元件、优化变压器设计等改进建议。该案例为电力电子系统建模提供了实用参考,有助于深入理解整流电路工作原理和性能优化方法。

amy_mhd的博客 189

android相对布局的事件分发,如何自己实现Android View Touch事件分发流程

Android Touch事件分发是Android UI中的重要内容,Touch事件从驱动层向上,经过InputManagerService,WindowManagerService,ViewRootImpl,Window,到达DecorView,经View树分发,最终被消费。本文尝试通过对其中View部分的事件分发,也是与日常开发联系最紧密的部分,进行重写。说是重写,其实是对Android该部分...

weixin_42464697的博客 195

RK3588平台开发系列讲解(硬件篇-功能外设2)

RK3588 芯片内置两个USB3.0 OTG控制器(内嵌2个USB2.0 OTG,下图绿色处),1个USB3.0 HOST 控制器,2个USB2.0 HOST控制器。这些控制器与PHY的内部复用图如下:USB3.0 OTG0 控制器支持SS/HS/FS/LS, 内嵌的USB2.0(HS/FS/LS)信号采用USB2.0 OTG PHY, 信号名见下图的红色方框内;RK3588目前仅此接口支持做Fireware的Download,应用中请务必要预留出。

whm128的博客 2512

基于 Arduino 的鱼缸水质检测控制系统设计

本系统通过多传感器实时采集鱼缸水质参数(pH 值、温度、溶解氧、浊度),经 Arduino 主控芯片处理后,驱动执行模块自动调节水质,并通过显示模块实时展示数据。系统具备阈值报警、自动换水、温度调节、增氧等功能,适用于家庭或小型水族箱的水质智能管理。本设计提供了低成本、易扩展的鱼缸水质管理方案,适用于家庭水族箱或小型水产养殖场景,可根据实际需求调整传感器类型和控制逻辑。注:本设计如有疑问需要解惑可直接私信本人,看我个人简介。

weixin_42300449的博客 1087

day38 自定义view,自定义属性以及view绘制流程,touch事件分发

自定义view,自定义属性简介 什么是自定义view? 在系统原有控件基础上进行二次的修改以及添加。 哪里使用自定义view? 当系统原生控件无法满足用户需求时,基于系统原生控件进行二次修改如上下拉刷新等UI效果 如何使用自定义view 编写外部类继承自view 重写构造方法 在xml中引用 自定义属性? res的values目录下的attrs.xml文件中(没有就自己新建一个),使用< ...

weixin_44419661的博客 244

使用abagen工具箱获取基于脑区的基因表达矩阵

脑区模板定义了您感兴趣的脑区的空间位置。abagen提供了一些预定义的脑区模板,您可以选择使用,也可以使用自定义的脑区模板。它提供了一种简便的方式来获取基于脑区的基因表达矩阵。abagen需要使用Allen脑图谱数据来获取基因表达矩阵。您可以使用abagen内置的下载功能来获取这些数据。这就是使用abagen工具箱获取基于脑区的基因表达矩阵的详细步骤。通过按照上述步骤操作,您可以轻松获取并使用Allen脑图谱数据中的基因表达信息。一旦您加载了脑区模板,您可以使用abagen来获取基于脑区的基因表达矩阵。

web_bug407的博客 1326

android View System touch 事件分发流程

View 系统触摸事件的分发流程

分享美好的专栏 1647

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

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

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Android Touch事件分发—拦截—处理

Android Touch事件分发(dispatchTouchEvent)—拦截(onInterceptTouchEvent)—处理(onTouchEvent)转自:http://www.cnblogs.com/linjzong/p/4191891.html(跟人感觉短小精悍有透彻)Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的V

Set(O2)的专栏 2213

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Touch事件分发

Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理。 View在ViewGroup内,ViewGroup也可以在其他ViewGroup内,这时候把内部的ViewGroup当成View来分析。 ViewGroup的相关事件有三个:onInterceptT

海礁的奋斗历程 306

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android的touch方法,Android下Touch事件的分发机制

我们通过一个示例来分析Touch事件的分发过程。示例:布局文件:xmlns:tools="http://schemas.android.com/tools"android:id="@+id/rootview"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vert...

weixin_30802909的博客 318

Android事件分发

Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev)、onInterceptTouchEvent(MotionEvent ev)、onTouchEvent(MotionEvent ev)

l_l_b的博客 2210

Android事件分发机制精炼详解

一、基础知识储备 在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要,这部分知识涉及的仍然以View为主,这也是初级应用层...

Chin_Style的博客 785

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

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

a2923790861的博客 757
上一篇: Android Studio 2.2中的APK打包
下一篇: Java Thread(Android Nougat源码)
ProgramResearch
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值