动画可以添加视觉提示,通知用户应用中正在发生的事情。当 UI 状态发生变化时,它们特别有用,例如当加载新内容或出现新操作时。动画还可以为您的应用增添精致的外观,使其具有更高的质量外观和感觉。
Android 包含不同的动画 API,具体取决于您想要的动画类型。本文档概述了您可以为 UI 添加运动的不同方法。
要更好地理解何时应该使用动画,还可以查看关于运动的 Material Design 指南。
动画位图
要动画化位图图形(例如图标或插图),请使用可绘制动画 API。通常,这些动画是使用可绘制资源静态定义的,但您也可以在运行时定义动画行为。
例如,一种向用户传达两个操作相关的好方法是动画化一个播放按钮,当点击它时,它会转换为暂停按钮。
有关更多信息,请阅读动画可绘制图形。
动画化 UI 可见性和运动
当您需要更改布局中视图的可见性或位置时,最好包含细微的动画来帮助用户了解 UI 如何变化。
要移动、显示或隐藏当前布局中的视图,您可以使用 android.animation
包提供的属性动画系统,该系统在 Android 3.0(API 级别 11)及更高版本中可用。这些 API 在一段时间内更新您的 View
对象的属性,并在属性更改时持续重绘视图。例如,当您更改位置属性时,视图会在屏幕上移动。当您更改 alpha 属性时,视图会淡入或淡出。
对于创建这些动画的最简单方法,请在您的布局上启用动画,以便当您更改视图的可见性时,动画会自动应用。有关更多信息,请参阅自动动画布局更新。
要了解如何使用属性动画系统构建动画,请阅读属性动画概述。您还可以查看以下页面以创建常见动画
基于物理的运动
只要有可能,请将现实世界的物理学应用到您的动画中,以使它们看起来自然。例如,当它们的目标发生变化时,它们应该保持动量,并在任何变化过程中进行平滑过渡。
为了提供这些行为,Android 支持库包含基于物理的动画 API,这些 API 依赖于物理定律来控制动画的发生方式。
两种常见的基于物理的动画如下
不基于物理的动画(例如使用 ObjectAnimator
API 构建的动画)相当静态并且具有固定的持续时间。如果目标值发生变化,则必须在目标值变化时取消动画,使用新值作为新起始值重新配置动画,并添加新目标值。在视觉上,此过程会在动画中产生突然停止,然后是不连贯的运动,如图 3 所示。
使用基于物理的动画 API(例如 DynamicAnimation
)构建的动画由力驱动。目标值的更改会导致力的更改。新力作用于现有速度,从而使向新目标的过渡连续进行。此过程导致更自然的动画,如图 4 所示。
动画化布局更改
在 Android 4.4(API 级别 19)及更高版本中,您可以使用转换框架在当前活动或片段中交换布局时创建动画。您需要做的就是指定起始和结束布局以及要使用的动画类型。然后,系统会找出并在两个布局之间执行动画。您可以使用它来交换整个 UI 或仅移动或替换某些视图。
例如,当用户点击某个项目以查看更多信息时,您可以使用该项目的详细信息替换布局,并应用如图 5 所示的转换。
起始布局和结束布局分别存储在 Scene
中,尽管起始场景通常会从当前布局自动确定。您创建 Transition
来告诉系统您想要哪种类型的动画,然后调用 TransitionManager.go()
,系统就会运行动画来交换布局。
有关更多信息,请阅读使用转换动画化布局更改。有关示例代码,请查看BasicTransition 。
在活动之间动画化
在 Android 5.0(API 级别 21)及更高版本中,您还可以创建在活动之间过渡的动画。这基于上一节中描述的相同转换框架,但它允许您在单独的活动中的布局之间创建动画。
您可以应用简单的动画,例如从侧面滑入新活动或淡入,但您还可以创建在每个活动中的共享视图之间过渡的动画。例如,当用户点击某个项目以查看更多信息时,您可以使用动画过渡到一个新活动,该动画会无缝地将该项目放大以填充屏幕,如动画图 5 所示。
照常,您调用 startActivity()
,但将其传递给由 ActivityOptions.makeSceneTransitionAnimation()
提供的选项包。此选项包可能包括活动之间共享的视图,以便转换框架可以在动画期间连接它们。
有关其他资源,请参阅