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