文化袁探索专栏——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;
}

文化袁探索专栏——事件分发机制相关推荐

  1. 文化袁探索专栏——消息分发机制

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  2. 文化袁探索专栏——React Native启动流程

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  3. 文化袁探索专栏——Activity|Application启动流程

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  4. 文化袁探索专栏——线程池执行原理|线程复用|线程回收

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  5. 文化袁探索专栏——Activity、Window和View三者间关系

    文化袁探索专栏--Activity.Window和View三者间关系 <文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--H ...

  6. 文化袁探索专栏——自定义View实现细节

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  7. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    <div id="container">         <div id="header">     <div class=&qu ...

  8. Android事件分发机制详解

    2019独角兽企业重金招聘Python工程师标准>>> 之前在学习Android事件方法机制的时候,看过不少文章,但是大部分都讲的不是很清楚,我自己理解的也是云里雾里,也尝试过阅读源 ...

  9. Android View系列(二):事件分发机制源码解析

    概述 在介绍点击事件规则之前,我们需要知道我们分析的是MotionEvent,即点击事件,所谓的事件分发就是对MotionEvent事件的分发过程,即当一个MotionEvent生成以后,系统需要把这 ...

最新文章

  1. JUC之CountDownLatch的源码和使用场景分析
  2. SpringCloud源码:Ribbon负载均衡分析
  3. python中的iter()函数与next()函数
  4. 蓝桥杯第五届省赛JAVA真题----最长公共子序列
  5. SPOJ-New Distinct Substrings,注意会爆int
  6. 微信小程序获取二维码scene参数报错 41030:invalid page rid: xx-xx-xx
  7. javascript异步代码的回调地狱以及JQuery.deferred提供的promise解决方式
  8. html个人中心源代码,HTML用户注册页面设置源码
  9. JVM篇-JVM内存结构与存储机制
  10. 中专计算机专业execl教案,信息技术excel教案
  11. 多目标跟踪 | 评测指标
  12. 为什么表格后面打不出0_用excel制作表格为什么打不出数字?
  13. python数据分析论文报告电影_一个实战案例带你走完python数据分析全流程:豆瓣电影评论的关键词云图制作...
  14. Python的exec
  15. Qt字符串生成二维码功能
  16. ui设计师必须了解的13中移动app界面设计的基础知识
  17. 微信小程序 获取formId
  18. 科创人·望繁信创始人索强:中国版流程挖掘注定有完全不同的活法
  19. 未来规划——如何在国内读完国外的硕士项目
  20. Java生鲜电商平台-App系统架构开发与设计

热门文章

  1. 推荐一本书:《人生十论》 钱穆 著
  2. 时间格式在ios不兼容的问题
  3. 【学习记录2】数组里的字符串转换成数字或者把数字转换成字符串
  4. 超越OCR的富文档内容解析神器LayoutParser
  5. iOS: 设置背景颜色为渐变
  6. 用 Wwise 和 Unity 制作 DLC 使用 Wwise 文件包(File Package)
  7. Tsunami: A Learned Multi-dimensional Index for Correlated Data and SkewedWorkloads(VLDB21)
  8. 财务分析之利润表、现金流量表
  9. web服务器种类汇集
  10. 记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器