Skip to content
阅读进度

触摸事件是怎样分发的? ​

返回 View 与显示链路 目录

标准回答 ​

在典型 View 层级中,事件从窗口进入 Activity,再沿 ViewGroup 向目标子 View 分发。dispatchTouchEvent 负责调度;ViewGroup 的 onInterceptTouchEvent 决定是否拦截给自己处理;onTouchEvent 负责处理事件。返回 true 通常表示在该层接受或消费事件。(ViewGroup 触摸事件管理)

机制解释 ​

一次手势通常从 DOWN 开始,经多个 MOVE,到 UP 或 CANCEL 结束。子 View 在 DOWN 阶段接住事件,通常才能成为后续事件的目标。父容器中途拦截时,原目标子 View 会收到 CANCEL。

延伸追问 ​

OnTouchListener 和 onTouchEvent 谁先?在满足启用等条件时,监听器可先处理;监听器返回 true 后通常不会再进入该 View 的 onTouchEvent。不要让监听器无条件消费所有事件,导致点击逻辑失效。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。