android的事件分发机制

android的事件分发机制

比如说,现在你所在的公司中有一项任务被派发下来了,项目经理把项目交给你的老大,你的老大老大手下有很多人,看了看觉得你做很合适,把这个任务交给你了;你一看觉得还行,你就接下来了;

这么一个小小场景大概就说明了android的事件分发;简而言之,就是大的传小的,小的能处理就处理,处理不了再返回给大的;

好,现在具体看看事件分发;

首先我们先看看为什么会有事件分发机制:

我们知道,android上的View是树形结构的,View可能会重叠在一起,当我们点击的地方有多个View都可以响应的时候,这个点击事件应该给谁呢?事件分发机制就是为了处理这个问题的;

接下来看看关于事件分发的三个主要对象:

一个事件产生之后,都是先传给Activity,在传给ViewGroup,最后传给View,对比上面的例子,Activity对应的就是项目经理,viewGroup就是你的老大,而你就相当于view了;

三个重要方法:

这里要注意一点,Activity和View是没有onInterceptTouchEvent()也就是事件拦截这个方法的,仔细想想就可以想明白,Activity是处于分发机制的最顶端,如果一开始就吧事件拦截了,那么会导致整个屏幕都无法响应用户的操作,这就相当于一个项目里所有的事情都由你的项目经理一个人干了,这显然是不理智的;而view处于事件分发的最末端,它不需要拦截,事件分发到View的时候,view能处理就处理,不处理就返回给他的父控件;

事件分发流程:

在讲上面这个图之前呢,我先解释一下这个phonewindow和decorview

手机屏幕我们可以称为一个窗口,也就是一个window,在android中这个window类是一个抽象类,它规定了一些管理窗口的方法,但是具体实现是由它的唯一实现类phonewindow去实现的,这样phonewindow就是整个屏幕的实际“掌控者”,而phonewindow又是通过它的内部类decorview去对view进行管理;

接下来进行流程分析,我们就以点击事件为例:

当用户点击了屏幕,首先Activity先监测到,事件先传递到Activity中,Activity通过它的dispatchTouchEvent将事件分发到phoneWindow,phonewindow则会调用superdispatchTouchEvent方法的内部是调用了其内部类DecorView的superdispatchTouchEvent,而DecorView又会调用dispatchTouchEvent去进行事件分发,如果不拦截事件,那么就会继续下传到rootview,rootview中的操作是一样的,同样在dispatchTouchEvent内部调用onInterceptTouchEvent去判断是否拦截,不拦截就会把事件分发给下一个viewgroupA,拦截就直接在onTouchEvent返回true,viewgroupA中做的判断也是一样,最后事件传递到view1,view1是最底层控件,不会有onInterceptTouchEvent,它的选择就只有处理后不处理,处理就在onTouchEvent进行处理并返回true,不处理的话事件也不会被销毁,view1这时会把事件回传,经过上述流程后回传给activity,如果Activity还不处理,那么这个事件才会被销毁;

读懂上面的叙述,相信对android的事件分发有很清晰的认识了;

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

  1. Android 的触摸反馈以及事件分发机制

    在Android系统中,当你点击App某个按钮从你按下到抬起到底发生了什么? 要想解释这个问题首先需要了解Android的几个事件类型. Android 的事件类型分为以下四种: 1.MotionEv ...

  2. Android面试老生常谈的 View 事件分发机制,看这一篇就够了

    本文首发我的微信公众号:徐公,想成为一名优秀的 Android 开发者,需要一份完备的 知识体系,在这里,让我们一起成长,变得更好~. 在 Android 开发当中,View 的事件分发机制是一块很重 ...

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

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

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

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

  5. android系统(8)---android事件分发机制

    前言 Android事件分发机制是每个Android开发者必须了解的基础知识 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析.简单问题复杂化等等 今天 ...

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

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

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

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

  8. 浅谈Android事件分发机制

    在Android实际开发过程中经常会遇到View之间的滑动冲突,如ScrollView与Listview.RecyclerView之间的嵌套使用.在很好的解决此类问题之前,我们应深入的了解Androi ...

  9. Android 事件分发机制

    Android 事件分发机制  demo验证:  https://blog.csdn.net/hty1053240123/article/details/77866302 目录 1.基础认知 2.事件 ...

最新文章

  1. java nio 断开连接_浅尝Java NIO与Tomcat连接调优
  2. 【机器学习】机器学习12个关键经验教训
  3. VS NuGet使用
  4. 清除webBrowser 缓存和Cookie的解决方案
  5. event loop那些事儿
  6. iwrite提交不了作业_痛点!为什么开发了那么多软件,还是解决不了教学问题!...
  7. linux su - 用户名,在Linux中,su命令 (切换用户)
  8. easyui自学模板代码
  9. java 模拟ping_模拟Ping操作的一个Java类
  10. URI和URL、URN的作用和区别
  11. C++ Primer 第五版 课后章节练习答案 第九章
  12. 进阶篇:3.1)注塑件设计
  13. STM32蓝牙控制LED灯开关
  14. 腾讯云实时音视频带你玩转语音聊天室
  15. tensor.chunk、split的组合、拼接、切片
  16. MySQL事件的创建和执行
  17. 【Web方向】 PHP代码审计 CTF题目wp1
  18. “宗师珐琅,艺术之旅”在京召开,张同禄最后手稿作品惊艳亮相。
  19. anaconda安装成功测试_如何检验Anaconda是否安装成功
  20. Matlab:matlab 画图总结(二维图、饼图、直方图,坐标轴设置)及输出高清晰度图

热门文章

  1. [MFC] CDialog::DoModal()函数用法
  2. 基于平面 marker 的 Bundle Adjustmet
  3. Java学习日报—2021/11/18
  4. mysql索引 实验_“索引”实验小例
  5. 【LeetCode】剑指 Offer 61. 扑克牌中的顺子
  6. hessian、rmi、dubbo与rpc关系
  7. 数据结构与算法(八)-二叉树(斜二叉树、满二叉树、完全二叉树、线索二叉树)...
  8. 响应式布局这件小事有哪些优点和缺点该怎么设计
  9. Android嵌入式安卓触摸屏|4418开发板平台
  10. 怎样高速读懂别人的项目