深入理解 View 的事件传递机制

本文深入探讨了Android中View的事件传递机制,包括ACTION_DOWN、ACTION_UP等MotionEvent常量,以及事件如何从Activity到View的传递过程。通过示例代码和源码解析,详细阐述了事件的分发、拦截和消费,帮助读者理解这一关键机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言:现在 GitHub 上酷炫的 Android 控件越来越多,一方面我们可以让 App 各美观,另一方面我们这些开发者也可以从中学习到各种知识。写下这篇博文主要是记录研究自定义控件源码过程中接触到的知识盲区,帮助自己巩固知识的同时,也和大家交流学习,一起进步。

Demo源码

废话不多说,进入正题:

一、概述 View 事件传递机制

用户通过点击、滑动屏幕与 App 产生交互是移动互联网时代的交互基础,那么在 Android 中,用户的点击、滑动是怎么和 Android 系统产生交互的呢?

在 Android 中,我们所说的点击、滑动等事件,都被视为 MotionEvent ,而在 MotionEvent 中,我们的操作行为被归类为以下常量:

  • ACTION_DOWN
  • ACTION_UP
  • ACTION_MOVE
  • ACTION_POINTER_DOWN
  • ACTION_POINTER_UP
  • ACTION_CANCEL

除此以外,为了让系统更好地管理和操作这些事件,MotionEvent 还需要记录事件的发生时间,判断事件是单点触控/多点触控以及事件的发生时间。可能有人会问了,就这么点常量够我们判断我们的手势吗?莫慌,Google 对事件可是有着明确的区分标准呢:一次触控操作,起于 ACTION_DOWN 终于 ACTION_UP。简单的触控操作,如:点击、滑动等,很轻松就能通过这些常量判断出来;而复杂的手势,则需要根据你手指的滑动轨迹不断地对事件坐标进行分析了。

注:为了简化理解,后文中我将把所有和点击、滑动等等有关的事件归类为点击事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值