Android事件分发机制要点:

1.Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。View包含dispatchTouchEvent、onTouchEvent两个相关事件。其中ViewGroup又继承于View。
2.ViewGroup和View组成了一个树状结构,根节点为Activity内部包含的一个ViwGroup。
3.触摸事件由Action_Down、Action_Move、Aciton_UP组成,其中一次完整的触摸事件中,Down只有一个,Move有若干个,可以为0个,Up最多只有一个
4.当Acitivty接收到Touch事件时,将遍历子View进行Down事件的分发。ViewGroup的遍历可以看成是递归的。分发的目的是为了找到真正要处理本次完整触摸事件的View,这个View会在onTouchuEvent结果返回true。
5.当某个子View返回true时,会中止Down事件的分发,同时在ViewGroup中记录该子View。接下去的Move和Up事件将由该子View直接进行处理。由于子View是保存在ViewGroup中的,多层ViewGroup的节点结构时,上级ViewGroup保存的会是真实处理事件的View所在的ViewGroup对象:如ViewGroup0-ViewGroup1-TextView的结构中,TextView返回了true,它将被保存在ViewGroup1中,而ViewGroup1也会返回true,被保存在ViewGroup0中。当Move和UP事件来时,会先从ViewGroup0传递至ViewGroup1,再由ViewGroup1传递至TextView。
6.当ViewGroup中所有子View都不捕获Down事件时,将触发ViewGroup自身的onTouch事件。触发的方式是调用super.dispatchTouchEvent函数,即父类View的dispatchTouchEvent方法。在所有子View都不处理的情况下,触发Acitivity的onTouchEvent方法。

   

7.onInterceptTouchEvent有两个作用:1.拦截Down事件的分发。2.中止Up和Move事件向目标View传递,使得目标View所在的ViewGroup捕获Up和Move事件。

更多相关文章

  1. Android adb 模拟滑动 按键 点击事件
  2. 重点核心☆☆☆☆☆按钮点击事件的四种类型
  3. 关于android 的触摸事件
  4. android 添加button事件后 提示 view cannot be resolved to a t
  5. Android RecyclerView使用(二) -给Item添加点击事件
  6. Android事件分发机制原理及源码分析
  7. .Net 转战 Android 4.4 日常笔记(8)--常见事件响应及实现方式
  8. Android事件分发-总结
  9. Android ListView 事件监听 || 关于ListView选中时显示的效果。

随机推荐

  1. MySQL索引下推详细
  2. 解决MySql8.0 查看事务隔离级别报错的问
  3. MySQL主从同步原理及应用
  4. MySQL UPDATE 语句一个“经典”的坑
  5. 一条SQL语句在MySQL中是如何执行的
  6. 一次现场mysql重复记录数据的排查处理实
  7. MyBatis 动态SQL全面详解
  8. MySQL中datetime时间字段的四舍五入操作
  9. 浅谈MySQL表空间回收的正确姿势
  10. mysql如何能有效防止删库跑路