Android下与Touch事件相关的方法有三个dispatchTouchEvent(),onInterceptTouchEvent()和onTouchEvent(),能够对这三个方法进行响应的控件包括ViewGroup,View和Activity。其中ViewGroup和View对Touch事件的三个方法均能响应,Activity对onInterceptTouchEvent()不能做出响应,当然,View对dispatchTouchEvent()和onInterceptTouchEvent()做出响应的前提是在View中有添加子view,如果当前的View已经是最小的单位了,则事件不能向下分发与拦截,即不能响应dispatchTouchEvent()和onInterceptTouchEvent()方法

Touch事件分析

事件的分发:dispatchTouchEvent(MotionEvent ev)

Touch事件发生时,Activity中的dispatchTouchEvent()会以隧道的形式(从根元素开始依次传递到最内层的子View)对Touch事件进行分发,会传递给内层View的dispatchTouchEvent(),并且由该View的dispatchTouchEvent()继续对事件进行分发,其中分发逻辑如下
  • 返回值为true:事件会分发给当前的View,并由当前view的dispatchTouchEvent()进行消费,且事件不再往下传递
  • 返回值为false:

1:如果当前view的事件来自Activity,则事件会返回给Activity的onTouchEvent()进行消费

2:如果当前view的事件来子上层的父控件,则事件会返回给上层view的onTouchEvent()进行消费
  • 如果返回系统默认的super.dispatchTouchEvent(event ev):事件会自动分发给当前view的onInterceptTouchEvent()方法进行处理

事件的拦截:onInterceptTouchEvent(MotionEvent ev)

onInterceptTouchEvent表示对事件进行拦截处理,如果当前控件希望对触摸事件进行处理而不希望其继续向下传递的时候,就需要onInterceptTouchEvent来进行干扰了,onInterceptTouchEvent()方法的处理逻辑如下:
  • 返回值为true:表示当前view对该触摸事件进行拦截,并交由当前view的onTouchEvent()方法进行处理;
  • 返回值为false:表示当前view对该触摸事件不进行拦截,将触摸事件继续往下传递,交由子控件的dispatchTouchEvent()继续对事件进行分发。
  • 返回值为系统默认的super.onInterceptTouchEvent(Event ev):事件默认会被拦截,并交由当前View的onTouchEvent()进行处理

事件的响应:onTouchEvent(MotionEvent ev)

在view中,一般由onTouchEvent()对事件进行响应的处理,其中处理的逻辑如下:
  • 如果事件传到了当前view的onTouchEvent,而该方法返回了false;表示当前的view对该事件不进行处理,该事件会向上传递并由上层view的onTouchEvent()来对事件进行处理,如果上层view的onTouchEvent()继续返回了false,则表示事件不消费,事件会消失
  • 如果事件传到了当前的view的onTouchEvent,且该方法返回了true,表示当前的view对该事件进行处理
  • 如果返回的是系统默认的super.onTouchEvent(ev),则对事件的处理逻辑与返回false时是相同的
以上就是我现在对Touch事件传递的简单的理解与分析,方便以后的学习,后续还会继续研究做笔记,

Android事件分发机制(一)相关推荐

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

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

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

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

  3. 浅谈Android事件分发机制

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

  4. Android 事件分发机制

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

  5. Android事件分发机制:基础篇:最全面、最易懂

    如何提升安卓水平?安卓开发者必须了解的事件分发机制. 最全面.最易懂的形式来讲解Android事件分发机制. 0. 前言 鉴于安卓分发机制较为复杂,故分为多个层次进行讲解,分别为基础篇.实践篇与高级篇 ...

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

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

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

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

  8. 一篇文章彻底搞懂Android事件分发机制

    本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解 ...

  9. Android 事件分发机制分析及源码详解

    Android 事件分发机制分析及源码详解 文章目录 Android 事件分发机制分析及源码详解 事件的定义 事件分发序列模型 分发序列 分发模型 事件分发对象及相关方法 源码分析 事件分发总结 一般 ...

  10. 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发机制...

    前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...

最新文章

  1. MyBatis动态SQL之 set 和 trim标记的使用示例
  2. linux时序图工具,在Linux系统下通过IAuto.deb或星火商店安装IAuto流程图工具
  3. Python报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 199: illegal multibyte s
  4. nodejs的调试debug
  5. Linux中的15个‘echo’ 命令实例
  6. 爱奇艺PPS如何登陆账号
  7. mysql下载安装教程win7_win7系统安装MySQL软件的详细步骤
  8. 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak
  9. shell_之_find(查找)
  10. Runtime底层原理探究(二) --- 消息发送机制(慢速查找)
  11. Spring Boot 如何使用 Redis 进行 API 防刷限流?
  12. mapreduce实现矩阵相乘
  13. 人工智能专业就业有哪些岗位方向
  14. 虚拟串口 VSPD 的使用
  15. 三菱FX1S PLC控制伺服电机小结
  16. 生信入门(二)fastqc 生成的.html解读
  17. Win10休眠后蓝牙键盘无法唤醒怎么办?
  18. JavaScript 制作百度输入预测功能
  19. 如何使用VBA从Internet下载文件
  20. js获取当前日期的下周一

热门文章

  1. Log Explorer 恢复误删除、更新数据
  2. JS正则表达式从入门到入土(7)—— 分组
  3. 一步步构造自己的vue2.0+webpack环境
  4. C#基础笔记(第十天)
  5. 深入理解java:1.1. 类加载器
  6. c语言的数组长度问题
  7. MyBatis和Hibernate的优缺点对比。
  8. BeautifulSoup_python3
  9. 使用FZip创建压缩文件保存到桌面
  10. Essential Booklist of .Net Framework