AOSP Android14 Launcher3——动画核心类QuickstepTransitionManager详解

Launcher3中,有一个类在跟桌面相关的各种动画中扮演着非常关键的角色,这个类就是QuickstepTransitionManager。

QuickstepTransitionManager在aosp中的路径为:aosp/packages/apps/Launcher3/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java

接下来我们来深入分析 QuickstepTransitionManager.java 这个类。它是 Quickstep (Launcher3 的手势导航和过渡动画核心实现) 中至关重要的部分,负责管理和协调各种复杂的应用程序启动和关闭过渡动画

核心作用 (Core Role):

QuickstepTransitionManager 的主要职责是定义、注册和执行当用户在 Launcher 和其他应用程序之间切换时所看到的窗口过渡动画。这包括:

  1. 应用启动动画: 当用户从 Launcher (如点击图标、小部件或从概览启动任务) 启动一个应用程序时,QuickstepTransitionManager 负责创建和运行动画,使得 Launcher 界面元素(如图标、背景、工作区)能够平滑地过渡到应用程序窗口的出现。

  2. 应用关闭动画 (返回桌面): 当用户从一个应用程序通过手势或按键返回到 Launcher (桌面) 时,它负责创建和运行动画,使得应用程序窗口能够平滑地过渡(通常是缩小)到 Launcher 上的对应目标(图标、小部件或屏幕中心),同时 Launcher 界面元素(工作区、背景等)恢复显示。

  3. 概览启动动画: 管理从概览 (RecentsView) 启动任务时的特殊过渡动画。

  4. 特殊场景处理: 处理一些特殊情况下的动画,如从锁屏解锁进入 Launcher、从小部件启动应用、从预测行启动应用等。

  5. 动画参数计算: 计算动画所需的各种参数,如窗口的起始/结束位置、缩放比例、透明度、圆角、裁剪区域等。

  6. 系统动画注册: 向 Android 系统的窗口管理器 (WindowManager) 注册这些自定义的过渡动画。这通过 RemoteAnimationAdapter (旧版) 或 RemoteTransition (新版 Shell Transitions) 实现,使得系统在进行窗口切换时,能够调用 Launcher 提供的动画逻辑来取代默认的窗口动画。

简单来说,QuickstepTransitionManager 就是 Launcher3 中负责**“让应用打开和关闭看起来很酷很流畅”**的幕后导演。

工作原理 (How it Works):

其工作原理主要基于 Android 提供的远程动画 (Remote Animations / Transitions) 机制:

  1. 注册:
    • 在 Launcher 启动时 (或特定时机),QuickstepTransitionManager 会通过 SystemUiProxy 向系统注册自定义的动画。
    • 它会指定哪些窗口切换场景(由 WindowManager.TransitionTypeTransitionFilter 定义,例如 TRANSIT_OLD_WALLPAPER_OPEN, TRANSIT_OPEN/CLOSE 组合等)应该使用 Launcher 提供的动画逻辑。
    • 注册的核心是一个实现了 RemoteAnimationRunnerCompatIRemoteTransition 接口的对象 (通常是 LauncherAnimationRunner 的实例)。
// quickstep/src/com/android/launcher3/uioverrides/QuickstepLauncher.java
  protected void setupViews() {
   
   
        super.setupViews();

      	......省略

        mAppTransitionManager = buildAppTransitionManager();
        //向系统注册自定义动画
        mAppTransitionManager.registerRemoteAnimations();
		......省略
 }
//quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
   public void registerRemoteAnimations() {
   
   
        if (SEPARATE_RECENTS_ACTIVITY.get()) {
   
   
            return;
        }
        RemoteAnimationDefinition definition = new RemoteAnimationDefinition();
        addRemoteAnimations(definition);
        mLauncher.registerRemoteAnimations(definit
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值