AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

我们来深入分析 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)创建并传入。
    • 交互: AbsSwipeUpHandlerGestureState 读取手势信息(起始点、当前运行任务、速度、是否暂停等),并将计算出的最终目标 (endTarget) 写回 GestureState
  • RecentsAnimationController & RecentsAnimationTargets:
    • 提供者: 由 SystemUI (WindowManager) 在手势开始时通过
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值