欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

Android 事件分发机制详解与实战剖析 | 开发者说·DTalk

本文为自己多年来在 Android 实战开发过程中总结归纳的一些常见问题,现在分享出来希望对初学者有所帮助。

事件分发是 Android 开发过程中的重点又是难点, 一张事件分发流程图,让你彻底搞明白。网上有很多文章写事件分发,感觉都没有讲明白,恭喜你,今天你看到好文章了,你彻底搞清楚…

目录

1.在 Android 操作系统中,拥有事件传递功能的类都有哪些?
2.触摸事件的类型?
3.事件传递的三个阶段?
4.简述 View 的事件传递机制?
5.简述 ViewGroup 的事件传递机制?
6.事件分发流程图
7.实战案例

1.在 Android 操作系统中,拥有事件传递功能的类都有哪些?

  • Activity: 拥有 dispathTouchEvent 和 onTouchEvent 方法
  • View: 拥有 dispathTouchEvent 和 onTouchEvent 方法
  • ViewGroup: 拥有 dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent

2.触摸事件的类型?

主要有三种:
  • ACTION_DOWN: 手指的按下操作
  • ACTION_MOVE: 手指按下后,松开手之前,轻微移动所触发的事件
  • ACTION_UP: 手指离开屏幕的操作

3.事件传递的三个阶段?

3.1 按照事件进行划分

 

3.2 按照 View 进行划分

结论: 无论是 View 还是 ViewGroup,不管他是 DispatchTouchEvent 还是 onTouchEvent 方法,方法返回 true、返回 false 的处理逻辑都是一样的,只是调用父类的同名方法的时候处理的逻辑有所不同,View 偏重消费、ViewGourp 偏重分发。

 

4.简述 View 的事件传递机制?

触摸事件的传递流程是从 dispatchTouchEvent 开始的,如果不进行人工干预,则事件将会依照 View 树的嵌套层次从外层向内层传递,到达最内层的 View 时,就由它的 onTouchVent 方法处理。

如果事件在传递过程中,进行了人工干预,事件分发函数返回 true 表示自行消费,返回父类的同名方法则该事件传递给自身的 onTouchEvent 进行处理,返回 false 表示该事件会回传给父 view 的 onTouchEvent 方法进行处理,此时后面的事件都接受不到了,最后由哪个 View 处理,以后的所有事件都交由它来处理。
如果事件在传递过程中,进行了人工干预,事件处理函数,返回 true 和调用同名方法表示该事件被消费,返回 false 则表示该事件回传给父类的同名方法进行处理。
事件触发是先触发 onTouch,再触发 onClick,如果 onTouch 方法返回 true,表示消费掉该事件,不在继续进行事件传递,onClick 也不会被调用,如果 onTouch 方法返回 false,则继续会事件传递,onClick 会被调用。

5.简述 ViewGroup 的事件传递机制?

触摸事件的传递顺序是由 Activity 到 ViewGroup,再由 ViewGroup 递归传递给他的子 View,ViewGroup 通过 onInterceptTouchEvent 方法对事件进行拦截,如果该方法返回 true,则事件不会继续往下传递给子 View,如果返回 false 或者是调用 super.onInterceptTouchEvent,则事件会继续会传递给子 View。

如果事件在传递过程中,进行了人工干预,事件分发函数返回 true 表示事件被自行消费,返回 false,则回传给父 View 的 onTouchEvent 进行处理,此时后面的事件都接受不到了,调用同名方法则继续传递。
如果事件在传递过程中,进行了人工干预,事件处理函数,返回 true 则表示该事件被消费,返回 false 和调用同名方法则表示该事件回传给父类的同名方法进行处理。

6.事件分发流程图

一张 Android 事件分发流程,让你彻底搞明白 Android 的事件分发机制。

7.实战案例

实现效果如下,底部的行程详情可以往上拖动覆盖在地图之上,也可以往下拖动停止在屏幕的正中位置,地图相关操作: 放大、缩小、移动都能正常的响应,怎么实现?下面就是具体的源码实现过程。

7.1 事件分发处理

7.2 自定义 ViewTransparentView

7.3 自定义 TransScrollView

7.4 布局文件

 

 
赞(0) 打赏
未经允许不得转载:花花鞋 » Android 事件分发机制详解与实战剖析 | 开发者说·DTalk
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏