Android动画向量图(AnimatedVectorDrawable)详解

Android的AnimatedVectorDrawable是一个强大的特性,它允许开发者在应用中创建丰富的、交互式的矢量图形动画。这种技术尤其适用于图标、加载指示器或者复杂的UI元素动画,无需额外的资源文件或第三方库。在这里,我们将深入探讨AnimatedVectorDrawable的概念、使用方法以及相关示例。

  1. 矢量图形与AnimatedVectorDrawable

矢量图形与位图图形不同,它们基于数学公式,可以无损缩放,保持清晰度。Android提供了VectorDrawable类来支持矢量图形,而AnimatedVectorDrawable则是其动态版本,能进行动画操作。想了解更多关于矢量图形开发的内容,可以参考这里

  1. 创建AnimatedVectorDrawable

创建AnimatedVectorDrawable需要一个XML文件,定义动画的起始和结束状态。这个文件通常包含三个部分:<;vector>;元素定义静态矢量图形,<;animated-vector>;包含动画的定义,<;objectAnimator>;<;set>;定义动画的行为。描述中的"时钟"动画可能包含两个旋转动画,分别对应时针和分针。<;objectAnimator>;用于定义动画属性,如fromDegreestoDegrees


"@drawable/vector_clock" xmlns:android="http://schemas.android.com/apk/res/android">

"@animator/rotate_hour" android:name="hourHand">

"@animator/rotate_minute" android:name="minuteHand">



  1. 动画定义

通常在单独的XML文件中,比如rotate_hour.xmlrotate_minute.xml,其中包含<;animator>;元素:


"360000" android:valuefrom="0" android:valueto="360" xmlns:android="http://schemas.android.com/apk/res/android">

这里的valueFromvalueTo分别是动画的起始和结束角度,duration是动画的持续时间。

  1. 使用AnimatedVectorDrawable

在代码中,可以通过以下方式启动AnimatedVectorDrawable


Drawable drawable = ContextCompat.getDrawable(context, R.drawable.animated_vector_drawable);

((AnimatedVectorDrawable) drawable).start();

在视图中设置这个Drawable,动画将在视图上显示。

  1. 示例项目

压缩包中的"animated-vector-drawable-master"文件夹包含了两个示例:一个是“时钟”动画,另一个是“笑脸”路径变形动画。这两个例子展示了如何创建和启动AnimatedVectorDrawable,以及如何利用objectAnimator实现不同的动画效果。通过研究这些示例,开发者可以更好地理解AnimatedVectorDrawable的工作原理,并将其应用于自己的项目中。