我们来深入分析 quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java 这个非常核心且复杂的类。
1. 核心作用 (Core Role):
AbsSwipeUpHandler 是 Quickstep (Launcher3 的手势导航实现) 中处理从屏幕底部上滑手势的核心逻辑抽象基类。它负责管理从手势开始到结束的整个流程,包括:
- 手势识别与处理: 接收原始触摸事件,计算滑动距离、速度和方向。
- 窗口动画控制: 连接并控制由 SystemUI 提供的
RecentsAnimationController,通过操作应用窗口和 Launcher 窗口的 Surface (Leash),实现平滑的过渡动画(应用 <-> Launcher/概览)。 - 界面状态同步: 协调 Launcher UI 元素(如 Workspace、Hotseat、RecentsView)的状态和动画,使其与手势进度和窗口动画保持同步。
- 目标状态决策: 根据手势的速度、距离、暂停状态以及用户在 RecentsView 中的交互,计算手势的最终目标(
GestureEndTarget):返回桌面 (HOME)、进入概览/最近任务 (RECENTS)、切换到上一个应用 (LAST_TASK)、切换到新任务 (NEW_TASK) 或进入所有应用列表 (ALL_APPS)。 - 动画执行与收尾: 启动并管理过渡到最终目标状态的动画,并在动画结束后释放资源、完成任务切换或返回桌面。
- 处理特殊情况: 如 PiP (画中画) 窗口的特殊动画、分屏模式、Taskbar 交互等。
简单来说,它是连接用户上滑手势输入、系统窗口动画控制以及 Launcher UI 状态变化的总指挥。
2. 如何协调其他类 (Coordination):
AbsSwipeUpHandler 像一个交响乐指挥,协调多个组件共同完成复杂的动画和状态切换:
GestureState:- 提供者: 外部(如
TouchInteractionService)创建并传入。 - 交互:
AbsSwipeUpHandler从GestureState读取手势信息(起始点、当前运行任务、速度、是否暂停等),并将计算出的最终目标 (endTarget) 写回GestureState。
- 提供者: 外部(如
RecentsAnimationController&RecentsAnimationTargets:- 提供者: 由 SystemUI (WindowManager) 在手势开始时通过


7525

被折叠的 条评论
为什么被折叠?



