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