和过渡动画

启动新的 Activity 时的过渡动画(Transition Animation)与StartWindow(启动窗口)是两个不同但有一定关联的概念,下面是它们之间的关系详解:


一、StartWindow 是什么?

StartWindow(也叫 StartingWindow)是 Android 在启动新 Activity 时,由系统为你临时绘制的一个 UI 窗口,用于:

  • 减少“白屏”时间;
  • 在新 Activity 还没 onCreate 前就显示内容;
  • 通常显示应用图标 + 主题背景(如果你设置了 windowBackground 和 windowSplashScreenAnimatedIcon 等);
  • 出现在应用的冷启动或某些热启动时,新的 Activity 启动但还没完成绘制之前。

二、过渡动画是什么?

过渡动画是你启动 Activity 时,系统用来过渡显示新旧界面的一种视觉效果(如滑入、渐隐、共享元素等):

  • 默认动画由系统提供;
  • 可以通过 overridePendingTransition() 自定义;
  • 可以是窗口层面的动画(如 windowEnterAnimation);
  • Android 5.0+ 引入的 ActivityOptions.makeSceneTransitionAnimation() 支持共享元素动画。

三、两者的关系

方面 StartWindow Transition Animation
显示时机 Activity 启动前的临时窗口 新旧 Activity 切换过程
是否参与动画 通常不参与过渡动画 是动画的核心参与者
谁控制 系统控制(可配置主题) 开发者控制(overridePendingTransition 或 ActivityOptions)
替代关系 如果动画很快完成,可以几乎不看到 StartWindow 动画和 StartWindow 可以无缝接力

举个例子:

你从 A 启动 B:

  1. 系统为 B 显示一个 StartWindow(比如浅灰背景+logo);
  2. B 的进程准备好后,StartWindow 被真正的 B Activity 内容替换;
  3. 同时,A → B 可能伴随一个滑动动画;
  4. 如果 B 很快绘制完成,StartWindow 可能一闪而过;
  5. 如果 B 比较慢,就会先看到 StartWindow,再过渡到 B。

四、特别注意

  • Android 12 引入 SplashScreen API 后,StartWindow 可以变得更“动画化”,可以配置 Logo 动画、背景过渡等,使 StartWindow 和 Activity 的 enter transition 更自然衔接。
  • 如果你设置了复杂的 Activity Transition(比如共享元素),系统会尽量隐藏或快速移除 StartWindow,避免出现“突然切换”或闪动。

总结

启动新的 Activity 时,过渡动画与 StartWindow 是两个阶段的视觉体验:StartWindow 是内容准备前的填补物,而过渡动画是两个 Activity 之间的视觉桥梁。它们有衔接关系,但功能上是分开的。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器