当前位置: 首页 > news >正文

AOSP Android13 Launcher3——TransformParams 类

这个类是 Android Launcher3 中 Quickstep 手势导航系统的核心工具类,主要负责管理和计算应用切换动画过程中的变换参数。

一、核心作用

TransformParams 在 Launcher3 中扮演动画参数控制中心的角色,用于:

  1. 协调多窗口动画转换:在用户执行手势导航(如返回桌面、切换应用)时,统一管理多个窗口的动画参数
  2. Surface 变换计算:将高层动画进度转换为底层 SurfaceControl 的具体属性(位置、透明度、圆角等)
  3. 分层处理不同窗口类型:区分处理主目标窗口、桌面、助手、壁纸等不同类型的窗口

二、关键字段解析

// 核心动画参数
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();

七、设计亮点

  1. 链式调用:所有 setter 方法返回 this,支持流畅的 API 设计
  2. 策略解耦:通过 BuilderProxy 接口分离变换逻辑
  3. 分层渲染:自动处理壁纸层级(Integer.MIN_VALUE
  4. 特殊优化:针对助手窗口的专门淡出处理
  5. 灵活覆盖:允许手动指定圆角半径,否则自动插值

八、总结

TransformParams 是 Launcher3 手势导航动画系统的参数转换枢纽,它将用户的手势进度转换为具体的窗口变换效果,确保应用切换、返回桌面等操作流畅自然。这个类体现了 Android 系统级动画的专业性和复杂性。

http://www.dtcms.com/a/600672.html

相关文章:

  • 网站推广问题推广公司网站有哪些方式
  • 成都网站建设公司电话美食网站建设多少钱
  • 【把Linux“聊”明白】进程的概念与状态
  • GIT版本管理工具轻松入门 | TortoiseGit,本地 Git 仓库和 Git 概念,笔记02
  • 什么是美颜sdk?美型功能开发与用户体验优化实战
  • 在 React 项目中使用 Ky 与 TanStack Query 构建现代化数据请求层
  • 计算机网络---传输层安全 SSL与TLS
  • 【Linux篇】信号机制深度剖析:从信号捕捉到SIGCHLD信号处理
  • C语言编译软件选择及优化建议
  • Linux 之 【冯诺依曼体系结构与操作系统的简介】
  • 潍坊建设gc局网站windows优化软件
  • Java虚拟机(JVM)面试题(51道含答案)
  • [27] cuda 应用之 核函数实现图像通道变换
  • Aurora RDS MySQL The table ‘/rdsdbdata/tmp/#sql14b_df16d_1bd‘ is full
  • 手机响应式网站怎么做how to use wordpress
  • 网易云音乐回应“不适配鸿蒙”:推动相关部门加快步伐
  • C语言在线编译练习 | 提高编程技能与实战能力
  • 人工智能分支——深度学习、机器学习与神经网络初概览
  • C++ STL 关联式容器:map 与 set 深度解析与应用实践
  • 鄂尔多斯网站制作 建设推广网站建设前台功能
  • 策划书模板免费下载的网站免费获客平台
  • 如何搭建IoT机器视觉
  • 几分钟学会飞书多维表格开发
  • 11.12 脚本APP 手机如何开发简单APP
  • C++17常用新特性
  • oj题 ——— 链式二叉树oj题
  • 数据库项目实战五
  • Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)
  • 没有网站如何做SEO推广有用吗怎么不花钱自己开网店
  • ArkTS分布式设计模式浅析