动画简介

尝试 Compose 方法
Jetpack Compose 是 Android 推荐的 UI 工具包。了解如何在 Compose 中使用动画。

动画可以添加视觉提示,通知用户应用中正在发生的事情。当 UI 状态发生变化时,它们特别有用,例如当加载新内容或出现新操作时。动画还可以为您的应用增添精致的外观,使其具有更高的质量外观和感觉。

Android 包含不同的动画 API,具体取决于您想要的动画类型。本文档概述了您可以为 UI 添加运动的不同方法。

要更好地理解何时应该使用动画,还可以查看关于运动的 Material Design 指南

动画位图

图 1. 动画可绘制对象。

要动画化位图图形(例如图标或插图),请使用可绘制动画 API。通常,这些动画是使用可绘制资源静态定义的,但您也可以在运行时定义动画行为。

例如,一种向用户传达两个操作相关的好方法是动画化一个播放按钮,当点击它时,它会转换为暂停按钮。

有关更多信息,请阅读动画可绘制图形

动画化 UI 可见性和运动

图 2. 对话框出现和消失时的细微动画使 UI 变化不那么刺眼。

当您需要更改布局中视图的可见性或位置时,最好包含细微的动画来帮助用户了解 UI 如何变化。

要移动、显示或隐藏当前布局中的视图,您可以使用 android.animation 包提供的属性动画系统,该系统在 Android 3.0(API 级别 11)及更高版本中可用。这些 API 在一段时间内更新您的 View 对象的属性,并在属性更改时持续重绘视图。例如,当您更改位置属性时,视图会在屏幕上移动。当您更改 alpha 属性时,视图会淡入或淡出。

对于创建这些动画的最简单方法,请在您的布局上启用动画,以便当您更改视图的可见性时,动画会自动应用。有关更多信息,请参阅自动动画布局更新

要了解如何使用属性动画系统构建动画,请阅读属性动画概述。您还可以查看以下页面以创建常见动画

基于物理的运动

图 3. 使用 ObjectAnimator 构建的动画。

图 4. 使用基于物理的 API 构建的动画。

只要有可能,请将现实世界的物理学应用到您的动画中,以使它们看起来自然。例如,当它们的目标发生变化时,它们应该保持动量,并在任何变化过程中进行平滑过渡。

为了提供这些行为,Android 支持库包含基于物理的动画 API,这些 API 依赖于物理定律来控制动画的发生方式。

两种常见的基于物理的动画如下

不基于物理的动画(例如使用 ObjectAnimator API 构建的动画)相当静态并且具有固定的持续时间。如果目标值发生变化,则必须在目标值变化时取消动画,使用新值作为新起始值重新配置动画,并添加新目标值。在视觉上,此过程会在动画中产生突然停止,然后是不连贯的运动,如图 3 所示。

使用基于物理的动画 API(例如 DynamicAnimation)构建的动画由力驱动。目标值的更改会导致力的更改。新力作用于现有速度,从而使向新目标的过渡连续进行。此过程导致更自然的动画,如图 4 所示。

动画化布局更改

图 5. 显示更多详细信息的动画可以通过更改布局或启动新活动来实现。

在 Android 4.4(API 级别 19)及更高版本中,您可以使用转换框架在当前活动或片段中交换布局时创建动画。您需要做的就是指定起始和结束布局以及要使用的动画类型。然后,系统会找出并在两个布局之间执行动画。您可以使用它来交换整个 UI 或仅移动或替换某些视图。

例如,当用户点击某个项目以查看更多信息时,您可以使用该项目的详细信息替换布局,并应用如图 5 所示的转换。

起始布局和结束布局分别存储在 Scene 中,尽管起始场景通常会从当前布局自动确定。您创建 Transition 来告诉系统您想要哪种类型的动画,然后调用 TransitionManager.go(),系统就会运行动画来交换布局。

有关更多信息,请阅读使用转换动画化布局更改。有关示例代码,请查看BasicTransition

在活动之间动画化

在 Android 5.0(API 级别 21)及更高版本中,您还可以创建在活动之间过渡的动画。这基于上一节中描述的相同转换框架,但它允许您在单独的活动中的布局之间创建动画。

您可以应用简单的动画,例如从侧面滑入新活动或淡入,但您还可以创建在每个活动中的共享视图之间过渡的动画。例如,当用户点击某个项目以查看更多信息时,您可以使用动画过渡到一个新活动,该动画会无缝地将该项目放大以填充屏幕,如动画图 5 所示。

照常,您调用 startActivity(),但将其传递给由 ActivityOptions.makeSceneTransitionAnimation() 提供的选项包。此选项包可能包括活动之间共享的视图,以便转换框架可以在动画期间连接它们。

有关其他资源,请参阅