文化袁探索专栏——事件分发机制
文化袁探索专栏——Activity、Window和View三者间关系
文化袁探索专栏——View三大流程#Measure
文化袁探索专栏——View三大流程#Layout
文化袁探索专栏——消息分发机制
文化袁探索专栏——事件分发机制
文化袁探索专栏——Launcher进程启动流程’VS’APP进程启动流程
文化袁探索专栏——Activity启动流程
文化袁探索专栏——自定义View实现细节
文化袁探索专栏——线程池执行原理|线程复用|线程回收
文化袁探索专栏——React Native启动流程
用户点击屏幕,点击事件会在ViewRootImpl.java类中被接收和处理。然后进行事件的传递。通过view.dispatchPointEvent()将该点击事件传递给DecorView【View视图容器】,之后通过cb.dispatchTouchEvent()【cb是Window】将事件回调传递给Activity。接下来的事件传递流程就是
Activity–>>Window(PhoneWindow)–>>DecorView(FrameLayout)–>ViewGroup–>View
随后,事件经由Activity进行分发。当一个点击事件未被Activity下任何一个View/ViewGroup接收/处理时,则调用onTouchEvent处理事件。反之,则点击事件会经View/ViewGroup继续分发。且事件传递到ViewGroup经过代码流程,在Activity中调用getWindow().superDispatchTouchEvent(event),之后在PhoneWindow中调用mDecor.superDispatchTouchEvent(event),然后在DecorView经super.dispatchTouchEvent(event)将事件传递到Viewgroup。
///Activity.java
public boolean dispatchTouchEvent(MotionEvent ev) {...if (getWindow().superDispatchTouchEvent(ev)) {// 事件在Activity中有ViewGroup接受点击事件return true;}// 没有ViewGroup接受点击事件,Activity则调用onTouchEvent处理事件return onTouchEvent(ev);
}
当点击事件分发到ViewGroup时,会先通过变量disallowIntercept、onInterceptTouchEvent方法询问是否进行事件的拦截,若拦截ViewGroup则会自己处理该事件。若不拦截,则ViewGroup会遍历所有子View,查看是否有子View接受了该点击事件。若有,则会通过child.dispatchTouchEvent将该事件分发到View;若无,则将该点击事件通过super.dispatchTouchEvent交由Activity。
当事件分发到View时,在事件分发的方法dispatchTouchEvent中。若注册了Touch事件,会先通过onTouch判断是否进行消费,若被消费则不再进行事件的分发。反之,则执行onTouchEvent进行处理。在onTouchEvent进行处理过程中,若click事件注册,则会消费该点击事件。若click事件未注册则交由上层ViewGroup/Activtiy处理。
///View.java
public boolean dispatchTouchEvent(MotionEvent event) {...if (onFilterTouchEventForSecurity(event)) {if ((mViewFlags & ENABLED_MASK) == ENABLED && handleScrollBarDragging(event)) {result = true;}//noinspection SimplifiableIfStatementListenerInfo li = mListenerInfo;if (li != null && li.mOnTouchListener != null&& (mViewFlags & ENABLED_MASK) == ENABLED// 先通过onTouch判断是否进行消费,若被消费则不再进行事件的分发&& li.mOnTouchListener.onTouch(this, event)) {result = true;}if (!result && onTouchEvent(event)) {// onTouch若未消费,则执行onTouchEvent进行处理。result = true;}}...return result;
}
文化袁探索专栏——事件分发机制相关推荐
- 文化袁探索专栏——消息分发机制
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——React Native启动流程
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——Activity|Application启动流程
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——线程池执行原理|线程复用|线程回收
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——Activity、Window和View三者间关系
文化袁探索专栏--Activity.Window和View三者间关系 <文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--H ...
- 文化袁探索专栏——自定义View实现细节
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
<div id="container"> <div id="header"> <div class=&qu ...
- Android事件分发机制详解
2019独角兽企业重金招聘Python工程师标准>>> 之前在学习Android事件方法机制的时候,看过不少文章,但是大部分都讲的不是很清楚,我自己理解的也是云里雾里,也尝试过阅读源 ...
- Android View系列(二):事件分发机制源码解析
概述 在介绍点击事件规则之前,我们需要知道我们分析的是MotionEvent,即点击事件,所谓的事件分发就是对MotionEvent事件的分发过程,即当一个MotionEvent生成以后,系统需要把这 ...
最新文章
- JUC之CountDownLatch的源码和使用场景分析
- SpringCloud源码:Ribbon负载均衡分析
- python中的iter()函数与next()函数
- 蓝桥杯第五届省赛JAVA真题----最长公共子序列
- SPOJ-New Distinct Substrings,注意会爆int
- 微信小程序获取二维码scene参数报错 41030:invalid page rid: xx-xx-xx
- javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式
- html个人中心源代码,HTML用户注册页面设置源码
- JVM篇-JVM内存结构与存储机制
- 中专计算机专业execl教案,信息技术excel教案
- 多目标跟踪 | 评测指标
- 为什么表格后面打不出0_用excel制作表格为什么打不出数字?
- python数据分析论文报告电影_一个实战案例带你走完python数据分析全流程:豆瓣电影评论的关键词云图制作...
- Python的exec
- Qt字符串生成二维码功能
- ui设计师必须了解的13中移动app界面设计的基础知识
- 微信小程序 获取formId
- 科创人·望繁信创始人索强:中国版流程挖掘注定有完全不同的活法
- 未来规划——如何在国内读完国外的硕士项目
- Java生鲜电商平台-App系统架构开发与设计
热门文章
- 推荐一本书:《人生十论》 钱穆 著
- 时间格式在ios不兼容的问题
- 【学习记录2】数组里的字符串转换成数字或者把数字转换成字符串
- 超越OCR的富文档内容解析神器LayoutParser
- iOS: 设置背景颜色为渐变
- 用 Wwise 和 Unity 制作 DLC 使用 Wwise 文件包(File Package)
- Tsunami: A Learned Multi-dimensional Index for Correlated Data and SkewedWorkloads(VLDB21)
- 财务分析之利润表、现金流量表
- web服务器种类汇集
- 记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器