前言

  • Android事件分发机制是每个Android开发者必须了解的基础知识
  • 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全、思路不清晰、无源码分析、简单问题复杂化等等
  • 今天,我将全面总结Android的事件分发机制,我能保证这是市面上的最全面、最清晰、最易懂的

    1. 本文秉着“结论先行、详细分析在后”的原则,即先让大家感性认识,再通过理性分析从而理解问题;
    2. 所以,请各位读者先记住结论,再往下继续看分析;
  • 文章较长,阅读需要较长时间,建议收藏等充足时间再进行阅读


目录


1. 基础认知

1.1 事件分发的对象是谁?

答:事件

  • 当用户触摸屏幕时(View或ViewGroup派生的控件),将产生点击事件(Touch事件)。

    Touch事件相关细节(发生触摸的位置、时间、历史记录、手势动作等)被封装成MotionEvent对象

  • 主要发生的Touch事件有如下四种:

    • MotionEvent.ACTION_DOWN:按下View(所有事件的开始)
    • MotionEvent.ACTION_MOVE:滑动View
    • MotionEvent.ACTION_CANCEL:非人为原因结束本次事件
    • MotionEvent.ACTION_UP:抬起View(与DOWN对应)
  • 事件列:从手指接触屏幕至手指离开屏幕,这个过程产生的一系列事件 
    任何事件列都是以DOWN事件开始,UP事件结束,中间有无数的MOVE事件,如下图: 

即当一个MotionEvent 产生后,系统需要把这个事件传递给一个具体的 View 去处理,

1.2 事件分发的本质

答:将点击事件(MotionEvent)向某个View进行传递并最终得到处理

即当一个点击事件发生后,系统需要将这个事件传递给一个具体的View去处理。这个事件传递的过程就是分发过程。

1.3 事件在哪些对象之间进行传递?

答:Activity、ViewGroup、View

一个点击事件产生后,传递顺序是:Activity(Window) -> ViewGroup -> View

  • Android的UI界面是由Activity、ViewGroup、View及其派生类组合而成的 

  • View是所有UI组件的基类

    一般Button、ImageView、TextView等控件都是继承父类View

  • ViewGroup是容纳UI组件的容器,即一组View的集合(包含很多子View和子VewGroup),

    1. 其本身也是从View派生的,即ViewGroup是View的子类
    2. 是Android所有布局的父类或间接父类:项目用到的布局(LinearLayout、RelativeLayout等),都继承自ViewGroup,即属于ViewGroup子类。
    3. 与普通View的区别:ViewGroup实际上也是一个View,只不过比起View,它多了可以包含子View和定义布局参数的功能。

1.4 事件分发过程由哪些方法协作完成?

答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()

下文会对这3个方法进行详细介绍

1.5 总结

经过上述3个问题,相信大家已经对Android的事件分发有了感性的认知,接下来,我将详细介绍Android事件分发机制。


2. 事件分发机制方法&流程介绍

其中:

  • super:调用父类方法
  • true:消费事件,即事件不继续往下传递
  • false:不消费事件,事件也不继续往下传递 / 交由给父控件onTouchEvent()处理

接下来,我将详细介绍这3个方法及相关流程。

2.1 dispatchTouchEvent()

属性 介绍
使用对象 Activity、ViewGroup、View
作用 分发点击事件
调用时刻 当点击事件能够传递给当前View时,该方法就会被调用
返回结果 是否消费当前事件,详细情况如下:

1. 默认情况:根据当前对象的不同而返回方法不同

对象 返回方法 备注
Activity super.dispatchTouchEvent() 即调用父类ViewGroup的dispatchTouchEvent()
ViewGroup onIntercepTouchEvent() 即调用自身的onIntercepTouchEvent()
View onTouchEvent() 即调用自身的onTouchEvent()

2. 返回true

3. 返回false

android系统(8)---android事件分发机制相关推荐

  1. java 事件分发机制_读Android源码之事件分发机制最全总结

    原标题:读Android源码之事件分发机制最全总结 本文源码来自andorid sdk 22,不同版本会有细微差别,但核心机制是一致的 一.概述 事件分发有多种类型, 本文主要介绍Touch相关的事件 ...

  2. Android面试笔记之事件分发机制

    事件分发机制 前言 一.为什么会有事件分发机制 1.phonewindow 2.decorview 二.事件分发的方法 1.dispatchTouchEvent 2.onIntercrptTouchE ...

  3. Android View的事件分发机制和滑动冲突解决方案

    这篇文章会先讲Android中View的事件分发机制,然后再介绍Android滑动冲突的形成原因并给出解决方案.因水平有限,讲的不会太过深入,只希望各位看了之后对事件分发机制的流程有个大概的概念,并且 ...

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

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

  5. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...

  6. Android 系统(218)---Android的事件分发机制以及滑动冲突的解决

    Android的事件分发机制以及滑动冲突的解决 声明:  本文主要涉及VIew的事件分发与滑动冲突的解决,关于View的事件分发流程的部分内容参考自:  Android事件分发机制详解:史上最全面.最 ...

  7. Android 系统(199)---Android事件分发机制详解

    Android事件分发机制详解 前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析. ...

  8. Android系统(120)-android的事件分发机制

    android的事件分发机制 android的事件分发机制 比如说,现在你所在的公司中有一项任务被派发下来了,项目经理把项目交给你的老大,你的老大老大手下有很多人,看了看觉得你做很合适,把这个任务交给 ...

  9. android触摸事件分发,Android 事件分发机制

    Android 事件分发机制一直让人头痛,之前也是面向 GitHub 编程得过且过.今天下定决心了解一下,以便后面自己定制 View 效果.Android 触摸事件有三个基本类型:ACTION_DOW ...

最新文章

  1. Scrum Master如何让敏捷团队正常运转?
  2. 《Nmap渗透测试指南》—第1章1.2节Windows下安装Nmap
  3. java动态规划凑硬币问题,详解动态规划最少硬币找零问题--JavaScript实现
  4. 快排堆排归排三种排序的比较
  5. JavaScript实现combinationSum组合和算法(附完整源码)
  6. WARN RestSubmissionClient: Unable to connect to server spark://master:
  7. 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)
  8. python cookie池_Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
  9. 获取本机IP和MAC地址
  10. 【报告分享】未来教育的技术空间研究报告.pdf(附下载链接)
  11. Spring-Lifecycle接口
  12. 林森---博客园之二,对《闭包》的个人见解!希望能帮到不理解闭包的同学们!...
  13. 【2019牛客暑期多校训练营(第七场)E】Find the median【权值线段树】
  14. 360浏览器(极速)如何导出保存的账号密码
  15. 计算机word文档无法工作,word无法打开(WORD文档打不开_解决方法_电脑基础知识_IT/计算机_专业资料)...
  16. datatables实现复选框全选反选!!(亲测有效)
  17. 微信支付提示参数错误
  18. 一年赚一百万很简单(穷人翻身唯一出路)
  19. 百度云盘下载慢解决办法
  20. 心理学上的被动_心理学解读:你是被动的人吗?

热门文章

  1. 上海高考女生计算机专业,@2020高考:女生最多的15个专业,一辈子的好友就在这里...
  2. centos下redis安全相关
  3. 删除Office系列软件多余激活信息
  4. 我的Markdown的利器——Markdown Here、有道云笔记、iPic
  5. JS面向对象特性和值类型与复合类型
  6. 关于Java中被static修饰的静态变量 (类变量)
  7. Swift——常量变量
  8. HTML 网页页面切换的各种变换效果
  9. 一步一步安装SQL Server 2008(附截图)
  10. java读取clob字段的几种方法(转)