Launcher3中,有一个类在跟桌面相关的各种动画中扮演着非常关键的角色,这个类就是QuickstepTransitionManager。
QuickstepTransitionManager在aosp中的路径为:aosp/packages/apps/Launcher3/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java
接下来我们来深入分析 QuickstepTransitionManager.java 这个类。它是 Quickstep (Launcher3 的手势导航和过渡动画核心实现) 中至关重要的部分,负责管理和协调各种复杂的应用程序启动和关闭过渡动画。
核心作用 (Core Role):
QuickstepTransitionManager 的主要职责是定义、注册和执行当用户在 Launcher 和其他应用程序之间切换时所看到的窗口过渡动画。这包括:
-
应用启动动画: 当用户从 Launcher (如点击图标、小部件或从概览启动任务) 启动一个应用程序时,
QuickstepTransitionManager负责创建和运行动画,使得 Launcher 界面元素(如图标、背景、工作区)能够平滑地过渡到应用程序窗口的出现。 -
应用关闭动画 (返回桌面): 当用户从一个应用程序通过手势或按键返回到 Launcher (桌面) 时,它负责创建和运行动画,使得应用程序窗口能够平滑地过渡(通常是缩小)到 Launcher 上的对应目标(图标、小部件或屏幕中心),同时 Launcher 界面元素(工作区、背景等)恢复显示。
-
概览启动动画: 管理从概览 (RecentsView) 启动任务时的特殊过渡动画。
-
特殊场景处理: 处理一些特殊情况下的动画,如从锁屏解锁进入 Launcher、从小部件启动应用、从预测行启动应用等。
-
动画参数计算: 计算动画所需的各种参数,如窗口的起始/结束位置、缩放比例、透明度、圆角、裁剪区域等。
-
系统动画注册: 向 Android 系统的窗口管理器 (WindowManager) 注册这些自定义的过渡动画。这通过
RemoteAnimationAdapter(旧版) 或RemoteTransition(新版 Shell Transitions) 实现,使得系统在进行窗口切换时,能够调用 Launcher 提供的动画逻辑来取代默认的窗口动画。
简单来说,QuickstepTransitionManager 就是 Launcher3 中负责**“让应用打开和关闭看起来很酷很流畅”**的幕后导演。
工作原理 (How it Works):
其工作原理主要基于 Android 提供的远程动画 (Remote Animations / Transitions) 机制:
- 注册:
- 在 Launcher 启动时 (或特定时机),
QuickstepTransitionManager会通过SystemUiProxy向系统注册自定义的动画。 - 它会指定哪些窗口切换场景(由
WindowManager.TransitionType或TransitionFilter定义,例如TRANSIT_OLD_WALLPAPER_OPEN,TRANSIT_OPEN/CLOSE组合等)应该使用 Launcher 提供的动画逻辑。 - 注册的核心是一个实现了
RemoteAnimationRunnerCompat或IRemoteTransition接口的对象 (通常是LauncherAnimationRunner的实例)。
- 在 Launcher 启动时 (或特定时机),
// 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

最低0.47元/天 解锁文章
3687

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



