Android事件分发的注意问题

android触摸事件处理流程 光有这些思路和搞懂单个知识的应用是还远远不够的,在Android开源框架设计思想中的知识点还是比较多的,想要搞懂还得学会整理和规划:我们常见的**Android热修复框架、插件化框架、组件化框架、图片加载框架、网络访问框架、RxJava响应式编程框架、IOC依赖注入框架、最近架构组件Jetpack等等Android第三方开源框架,**这些都是属于Android开源框架设计思想的。如下图所示:这位阿里P8大佬针对以上知识点,熬夜整理出了一本长达1042页的完整版如何解读开源框架设计思想。 阅读详情

在这里插入图片描述

dispatchTouchEvent

只有返回super的情况下才会向下分发,分发的情况为:

Activity调用viewGroup的dispatchTouchEvent;

viewGroup 会调用自身的onInterceptTouchEvent();

然后再调用view的dispatchTouchEvent();

最后view 会调用onTouchEvent();

在这每个阶段,如果返回了true,直接消费掉,事件没有任何控件处理,认为这个事件是个费事件;
如果返回false,这个事件不再向下分发,而是调用父控件的onTouchEvent()方法,注意Acitvity会直接消费掉;

onInterceptTouchEvent

这个方法只有ViewGroup中含有,返回true拦截事件交给自身的onTouchEvent方法处理(一定要看注意第三条)
返回false和super会分发给子view的dispatchTouchEvent();

onTouchEvent();

返回super和false会调用父View的onTouchEvent方法,
返回true代表消费该事件

注意:

  1. 每一次touch产生的action事件,如果down事件在onTouchEvent()返回false,那么系统认为当前View不关心这一次的touch事件,此时这个action会传向父级,调用父级View的onTouchEvent。
    如果这个事件没有任何控件进行处理,那么这一次的touch事件之后发出的任何action(move up),该View都不会再接受,onTouchEvent在这一次的touch产生的action事件再也不会触发;但是如果我们对acition事件在dispatchTouchEvent方法消费了,那么后续的action事件仍能继续传递。只要走了onTouchEvent()并且返回了false那么后续的事件都不会接收到。

  2. 如果在ViewGroup的OnTouchEvent中down事件返回true,那么后续move、up不会走onInterceptTouchEvent,而是直接交给viewGroup自身的onTouchEvent来处理。也就是说父层已经截获了这次touch事件,之后的action也不必询问onInterceptTouchEvent,因此在viewGroup的子view中不会再接收到后续的move和up事件。

  3. onInterceptTouchEvent,返回true拦截事件交给自身的onTouchEvent方法处理这个表述是不完整的。我们知道如果onInterceptTouchEvent返回false,那么本次action将发送给更深层的View,
    并且之后的每一次action都会询问父层的onInterceptTouchEvent需不需要截获本次touch事件。如果第一次touch产生的down事件由子view进行处理了,那么后续产生的事件(move\up)在onInterceptTouchEvent()进行了return true的拦截,此时系统认为该viewgroup对此事件不进行处理,将调用父view的onTouchEvent()方法进行处理,并不会交给自身的onTouchEvent()来处理。我们说onInterceptTouchEvent,返回true拦截事件交给自身的onTouchEvent方法处理这个表述的满足情况是,actionDown事件在onInterceptTouchEvent 进行了拦截,会交给自身的onTouch来处理。

有兴趣可以关注一下个人的公众号,一起来交流学习;
在这里插入图片描述

Android 安卓Touch事件的分发流程解析 用户触摸屏幕产生一个触摸消息,系统底层将该消息转发给ViewRoot ( ViewRootImpl ),ViewRoot产生一个DISPATCHE_POINTER的消息,并且在handleMessage中处理该消息,最终会通过deliverPointerEvent(MotionEvent event)来处理该消息。 阅读详情

相关推荐

基于立创开源ESP32步进电机驱动板硬件设计与优化实践

本文详细介绍了基于立创开源平台的ESP32步进电机驱动板硬件设计与优化实践。重点解析了ESP32-PICO-D4与A4950驱动芯片的选型搭配、电源电路噪声隔离、PCB布局布线技巧以及保护电路设计,为开发者提供了从原理图到PCB的完整优化方案,有效提升驱动板的性能与稳定性。

7z8x2c4v6b9的博客 646

Android Touch事件传递机制

传递Touch事件Touch事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在 /dev/input/ 这个路径下创建硬件输入设备节点(这里的硬件设备就是我们的触摸屏了)。当手指触动触摸屏时,硬件设备通过设备节点向内核(其实是InputManager管理)报告事件,InputManager 经过处理将此事件传给 Android系统的一个系统Serv

小北的博客 386

从多项式到神经网络:DPD算法演进史及其在RRU中的工程实现

本文系统梳理了数字预失真(DPD)算法从经典多项式模型、查表法到神经网络驱动的演进历程,并深入探讨了其在基站射频单元(RRU)中面临的硬件资源约束与工程实现挑战。文章为通信设备的技术决策者提供了算法选型、性能权衡及混合架构设计的实用评估框架,助力在性能、功耗与成本间找到最优平衡。

cherry的博客 1076

Android事件分发机制详解:史上最全面、最易懂

前言 Android事件分发机制是每个Android开发者必须了解的基础知识网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面、最清晰、最易懂的 本文秉着“结论先行、详细分析在后”的原则,即先让大家感性认识,再通过理性分析从而理解问题;所以

lcs353732057的专栏 1694

php对接建行h5网页支付

php对接建行h5网页支付前言H5页面支付H5页面支付回调通知退款及其他的业务 前言 最近接到公司乙方要求,需要再支付上面增加建行的支付渠道。之前一直用的都是微信和支付宝这种第三方支付平台,银行直接对接比较少。没办法就只能上网搜索,搜索一番返现网上对接建行的资料比较少,没办法只好摸着石头过河,中间也借鉴了一些大佬的文章内容。 H5页面支付 根据建行的h5网页支付对接文档,还是可以看出是比较简单的。...

lihua100862的博客 5408

四十二、Fluent欧拉模型流化床模拟:从基础设置到颗粒动力学解析

本文详细解析了Fluent欧拉模型在流化床模拟中的应用,从基础概念到颗粒动力学设置全面覆盖。重点介绍了欧拉模型的颗粒温度概念、多相流配置技巧以及关键参数优化策略,帮助工程师准确模拟气固两相流动现象。通过实用案例演示了网格检查、求解器配置和边界条件设置的最佳实践。

weixin_27303545的博客 445

为什么执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了?

在郭霖大神的博客:Android事件分发机制完全解析,带你从源码的角度彻底理解(上)中有这样一句话: 如果你在执行ACTION_DOWN的时候返回了false,后面一系列其它的action就不会再得到执行了。简单的说,就是当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发后一个action。 准确的描述应该是这样: 如果一个子view处理了down事件,也就是返回了true。那么单链表中,会记录这个子view,后续的move和up事件都会分发给

知道这个有什么用? 3345

自动驾驶轨迹规划算法——Apollo EM Planner

Apollo EM Planner 是百度自动驾驶系统中的轨迹规划算法,采用期望-最大化(EM)迭代优化思想。其核心是将轨迹规划分解为路径优化(E-Step)和速度优化(M-Step)两个子问题,在Frenet坐标系下交替求解。算法先通过动态规划(DP)搜索粗路径,再使用二次规划(QP)进行平滑优化,并结合障碍物信息生成安全走廊。相较Lattice、Hybrid A*等规划器,EM Planner具有更好的实时性、动态障碍物处理能力和轨迹平滑性,适用于城市道路、高速公路等复杂场景。该算法通过解耦路径与速度优

swaggytiger的博客 2666

OnClick不被调用,onTouchEvent不被调用的情况是onTouch的DOWN返回true

(1)首先没有设置OnClickListener的情况下,onTouch的返回值表示的就是View对点击事件是否消耗,如果在DOWN事件传递过来时返回false,那么剩下的MOVE直到UP的事件都不会被onTouch接收到;如果在DOWN事件返回true,那么剩下的直到UP的事件都会接受到,无论你之后的返回值。 (2)在同时设置了OnTouchListener与OnClickListener之后,...

runrun117的博客 4007

从 Junior 到 Lead:ABAP 开发者进阶路线图与真实项目练级法

本文拆解了ABAP工程师从初级到高级的成长路径,强调能力提升依赖于可复用经验的积累。对于初级开发者,建议夯实ABAP Dictionary、内表处理和数据库思维三大基础,培养数据流与规则层的结构化思维,并逐步掌握面向对象编程。中级阶段应注重代码可维护性,通过单元测试和Clean ABAP规范提升工程质量。文章指出,ABAP开发者需要学会筛选学习重点,建立知识地图,并重视团队协作中的代码可读性。关键在于将碎片知识整合为可迁移的模型,而非盲目追求新技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

关于Android事件分发机制一些要注意的问题

有关android的事件分发机制,不再强调其重要性,本篇文章也不会去分析其基本流程,只是提出几个比较重要的知识点,在小编看来,android 事件分发机制,事件处理机制,是Activity ViewGroup View 对用户事件的一种传递与处理。这里分析三个问题:1.在android中那些元素具备事件分发处理的能力? 2.dispatchTouchEvent ( ) 返回 true 或者 fal

LJyLy525的博客 544

FPGA开发中的操作系统

在FPGA开发中,操作系统起着关键的作用,它负责任务管理、资源管理、中断处理和设备驱动程序等功能。在实际的FPGA开发中,可以选择使用现有的操作系统,如MicroC/OS-II、FreeRTOS等,或者根据具体需求自行设计和开发操作系统。在FPGA(可编程逻辑门阵列)开发中,操作系统扮演着关键的角色,为硬件设计师提供了一种有效的方式来管理资源、调度任务并实现系统级功能。本文将介绍FPGA开发中的操作系统概念,并提供一个简单的示例代码来说明如何在FPGA平台上实现一个基本的操作系统。

CqpFsharp的博客 1156

【Android】事件分发机制

从上表可以看到 Activity和 View都是没有事件拦截的,这是因为:Activity 作为原始的事件分发者,如果 Activity 拦截了事件会导致整个屏幕都无法响应事件,这肯定不是我们想要的效果。View作为事件传递的最末端,要么消费掉事件,要么不处理进行回传,根本没必要进行事件拦截。

2303_79296612的博客 1726

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android控件事件分发原理

android核心机制,用户点击屏幕控件的时候,指尖触碰到控件,会有按下(down)、移动(move)、抬起(up)操作,这一系列操作简称为事件,看上去简单,实际上包含了复杂的事件分发逻辑。我们知道一个activity里面有viewgroup、还有view,viewgroup里面有各种view,view与view甚至还会重叠,那么系统是如何判断用户点击的是哪个控件呢?1.为什么当前的viewgroup被消费了,事件不会往下分发了呢?

C_lea的博客 1912

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

安卓中的事件分发机制源码解析

安卓中的事件分发机制主要涉及到两类控件,一类是容器类控件ViewGroup,如常用的布局控件,另一类是显示类控件,即该控件中不能用来容纳其它控件,它只能用来显示一些资源类容,如Button,ImageView等控件。暂且称前一类控件为ViewGroup类控件(尽管ViewGroup本身也是一个View),后者为View类控件。

(* ̄︶ ̄) 8万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

安卓view事件分发机制

安卓view事件分发机制

似霰的博客 981

android事件分发机制

Android View事件分发机制的核心流程是:触摸事件从Activity开始,经由Window和DecorView,层层传递给根ViewGroup。ViewGroup通过dispatchTouchEvent()分发事件,用onInterceptTouchEvent()决定是否拦截,若不拦截则传递给子View。子View通过onTouchEvent()处理事件,返回true则消费事件,false则回溯给父容器。整个过程遵循"谁返回true谁消费事件"的规则,最终决定事件的流向和处理。

琦琦的博客 1201

Android事件分发机制

转载自https://www.jianshu.com/p/555ffeb64e68 虽然重复挺多 但是看完后确实清晰明朗了很多 参考资料 1. https://blog.youkuaiyun.com/ClAndEllen/article/details/79365369 2. https://www.jianshu.com/p/7661c871dd41 总结 1. 为什么会有事件分发机制 安卓上面的View是树形结构的,View可能会重叠在一起,当点击的地方有多个View可以响应的时候,这个点击事件...

u013773608的博客 1122

Android View的事件分发机制

Android View的事件分发机制

m0_74448051的博客 1153

安卓入门三十四 事件分发机制原理

这种设计是非常精巧的,上层View既可以直接拦截该事件,自己处理,也可以先询问(分发给)子View,如果子View需要就交给子View处理,如果子View不需要还能继续交给上层View处理。如下图,View是一层一层嵌套的,当手指点击View1的时候,下面的ViewGroupA、RootView等也是能够响应的,为了确定到底应该是哪个View处理这次点击事件,就需要事件分发机制来帮忙。前面我们了解到了我们的View是树形结构的,基于这样的结构,我们的事件可以进行有序的分发。

weixin_52735932的博客 931

Android事件分发机制详解

Android日常研发时,与View接触占据相当多的时间,而关于View的知识,主要集中在View的绘制和View对于点击事件的处理。关于View的绘制过程,可以查看一下这篇文章的介绍;关于View处理点击事件,可能有人会认为在onTouchEvent()这个方法处理点击事件就行了,不错,具体的处理过程确实是在这个方法中,但是点击事件在View间是怎么分发的?

王三的专栏 3984

Android——浅谈事件分发机制

A flexible view for providing a limited window into a large data set.

WormholeStack 4180

【Android面试】View的事件分发

Android面试13-View的事件分发分发的事件View继承关系事件分发处理流程事件分发顶级View对点击事件的分发过程事件处理事件处理总结 分发的事件 首先事件分发主要分为 事件分发发生在ViewGroup中的dispatchTouchEvent中 action_move会触发多次 View继承关系 view中dispatchTouchEvent用来处理事件 viewgroup中dispatchTouchEvent用来分发事件,不处理事件,viewgroup直接交给view去处理事件 事件分发处理

Rose J 的博客 1022

安卓事件分发

这时,所有的事件只有DOWN事件会从“最上面”传递到ViewGroup的dispatchTouchEvent方法(因为DOWN相当于询问官来询问你是否需要的,不管你dispatchTouchEvent返回true还是false,DOWN都会传下来,当然有一种情况,就是ViewGroup将事件直接拦截了,那DOWN都不会传递下来了),然后传递给子View的dispatchTouchEvent方法,子View的dispatchTouchEvent将DOWN事件传递给自己的onTouchEvent。

eeeeety6208的博客 682

Android Touch事件分发

Android Touch事件分发

不止于代码 875
上一篇: Android开发之路—网络请求篇Retrofit2.0的使用
下一篇: Android 一直卡在 Download maven-metadata.xml
FlyRabbit_1
博客等级 码龄10年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值