AOSP Android13 Launcher3——TransformParams 类
这个类是 Android Launcher3 中 Quickstep 手势导航系统的核心工具类,主要负责管理和计算应用切换动画过程中的变换参数。
一、核心作用
TransformParams 在 Launcher3 中扮演动画参数控制中心的角色,用于:
- 协调多窗口动画转换:在用户执行手势导航(如返回桌面、切换应用)时,统一管理多个窗口的动画参数
- Surface 变换计算:将高层动画进度转换为底层 SurfaceControl 的具体属性(位置、透明度、圆角等)
- 分层处理不同窗口类型:区分处理主目标窗口、桌面、助手、壁纸等不同类型的窗口
二、关键字段解析
// 核心动画参数
private float mProgress; // 动画进度 [0-1],0=起始状态,1=结束状态
private float mTargetAlpha; // 目标窗口的透明度
private float mCornerRadius; // 窗口圆角半径(-1表示自动插值)// 动画目标和执行器
private RemoteAnimationTargets mTargetSet; // 所有参与动画的窗口目标
private SurfaceTransactionApplier mSyncTransactionApplier; // Surface事务同步应用器
private SurfaceControl mRecentsSurface; // 最近任务的Surface引用// 自定义变换策略
private BuilderProxy mHomeBuilderProxy; // 桌面窗口的变换策略
private BuilderProxy mBaseBuilderProxy; // 非目标窗口的变换策略
三、核心方法分析
1. createSurfaceParams() - 最重要的方法
public SurfaceTransaction createSurfaceParams(BuilderProxy proxy)
功能:根据当前参数为所有动画目标创建 Surface 变换属性
处理逻辑:
遍历所有应用窗口 (unfilteredApps)
├─ 如果是主目标窗口 (app.mode == targetMode)
│ ├─ 桌面 (ACTIVITY_TYPE_HOME)
│ │ └─ 使用 mHomeBuilderProxy 处理
│ │
│ ├─ 助手 (ACTIVITY_TYPE_ASSISTANT)
│ │ └─ 特殊淡出效果:alpha = 1 - DEACCEL_2_5(progress)
│ │
│ └─ 普通应用
│ ├─ 设置透明度 = mTargetAlpha
│ └─ 使用传入的 proxy 处理
│
└─ 非目标窗口└─ 使用 mBaseBuilderProxy 处理(默认保持可见)单独处理壁纸层
└─ 设置 z-order = Integer.MIN_VALUE (始终在最底层)
2. BuilderProxy 接口
@FunctionalInterface
public interface BuilderProxy {BuilderProxy NO_OP = (builder, app, params) -> { };BuilderProxy ALWAYS_VISIBLE = (builder, app, params) -> builder.setAlpha(1);void onBuildTargetParams(SurfaceProperties builder,RemoteAnimationTarget app, TransformParams params);
}
设计模式:策略模式
作用:允许外部自定义不同窗口类型的变换逻辑
四、典型使用场景
场景 1:返回桌面动画
TransformParams params = new TransformParams().setProgress(0.5f) // 动画进行到50%.setTargetAlpha(0.5f) // 应用窗口半透明.setTargetSet(targets) // 设置动画目标.setSyncTransactionApplier(applier);SurfaceTransaction transaction = params.createSurfaceParams(customProxy);
params.applySurfaceParams(transaction); // 应用到屏幕
场景 2:助手叠加层淡出
当启动助手覆盖层时,代码会检测到 ACTIVITY_TYPE_ASSISTANT,并应用特殊的减速插值器使其平滑淡出。
五、与系统架构的关系
用户手势输入↓
GestureController (手势控制器)↓
AnimatorController (动画控制器)↓
TransformParams (参数计算) ← 当前类↓
SurfaceControl (底层渲染)↓
SurfaceFlinger (屏幕合成)
六、FloatProperty 属性
public static FloatProperty<TransformParams> PROGRESS;
public static FloatProperty<TransformParams> TARGET_ALPHA;
这些是 Android 属性动画系统的桥接属性,允许使用 ObjectAnimator 直接驱动:
ObjectAnimator.ofFloat(transformParams, TransformParams.PROGRESS, 0f, 1f).setDuration(300).start();
七、设计亮点
- 链式调用:所有 setter 方法返回
this,支持流畅的 API 设计 - 策略解耦:通过 BuilderProxy 接口分离变换逻辑
- 分层渲染:自动处理壁纸层级(
Integer.MIN_VALUE) - 特殊优化:针对助手窗口的专门淡出处理
- 灵活覆盖:允许手动指定圆角半径,否则自动插值
八、总结
TransformParams 是 Launcher3 手势导航动画系统的参数转换枢纽,它将用户的手势进度转换为具体的窗口变换效果,确保应用切换、返回桌面等操作流畅自然。这个类体现了 Android 系统级动画的专业性和复杂性。
