在Android应用开发中,通过XML文件定义动画是常用的实践方式,既能实现动画逻辑的复用,也便于后期维护调整。其中Animation-list和animator是两种不同动画类型的XML配置载体,分别对应帧动画和属性动画的实现。

Animation-list帧动画XML编写方法
Animation-list是Android中用于定义帧动画的XML标签,帧动画通过按顺序播放一组静态图片实现动态效果,适合实现简单的逐帧动画场景。
XML文件存放位置
Animation-list的XML文件需要放在res/drawable/目录下,文件后缀为.xml。
基础标签与属性
根标签为<animation-list>,支持两个核心属性:
- android:oneshot:布尔值,设置动画是否只播放一次,true表示只播放一次,false表示循环播放
- android:visible:布尔值,设置动画初始是否可见
子标签为<item>,每个<item>代表一帧动画,支持以下属性:
- android:drawable:指定该帧对应的图片资源
- android:duration:指定该帧的显示时长,单位为毫秒
示例代码
以下是一个实现加载动画的Animation-list XML示例:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- 第一帧,显示drawable中的loading_1图片,持续100毫秒 -->
<item
android:drawable="@drawable/loading_1"
android:duration="100" />
<!-- 第二帧,显示drawable中的loading_2图片,持续100毫秒 -->
<item
android:drawable="@drawable/loading_2"
android:duration="100" />
<!-- 第三帧,显示drawable中的loading_3图片,持续100毫秒 -->
<item
android:drawable="@drawable/loading_3"
android:duration="100" />
</animation-list>
代码中使用方式
在Java或Kotlin代码中,将该XML作为View的背景,再调用AnimationDrawable的start方法启动动画:
// 获取ImageView实例 ImageView loadingIv = findViewById(R.id.loading_iv); // 设置Animation-list为ImageView的背景 loadingIv.setBackgroundResource(R.drawable.loading_animation); // 获取AnimationDrawable对象 AnimationDrawable animationDrawable = (AnimationDrawable) loadingIv.getBackground(); // 启动动画 animationDrawable.start();
animator属性动画XML编写方法
animator相关的XML用于定义属性动画,通过改变View的属性值实现动画效果,支持平移、缩放、旋转、透明度变化等多种动画类型,功能比帧动画更灵活。
XML文件存放位置
animator的XML文件需要放在res/animator/目录下,文件后缀为.xml,如果项目没有该目录可以手动创建。
常用标签与属性
属性动画XML的根标签有多种选择,常用的包括:
- <set>:动画集合标签,可以包含多个动画,支持顺序或同时播放
- <objectAnimator>:单个属性动画标签,用于改变某个具体属性
- <animator>:数值动画标签,仅生成数值变化,不直接作用于View属性
以<objectAnimator>为例,常用属性如下:
| 属性名 | 含义 |
|---|---|
| android:propertyName | 要改变的属性名称,比如translationX、scaleY、rotation、alpha等 |
| android:duration | 动画总时长,单位为毫秒 |
| android:valueFrom | 属性起始值 |
| android:valueTo | 属性结束值 |
| android:valueType | 属性值类型,支持intType、floatType、colorType等 |
| android:repeatCount | 动画重复次数,默认0,-1表示无限重复 |
| android:repeatMode | 重复模式,restart表示重新播放,reverse表示反向播放 |
| android:interpolator | 插值器,控制动画的变化速率,比如加速、减速等 |
示例代码
以下是一个实现View平移加透明度变化的属性动画集合示例:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together">
<!-- 平移动画,X轴从0移动到300 -->
<objectAnimator
android:propertyName="translationX"
android:duration="1000"
android:valueFrom="0"
android:valueTo="300"
android:valueType="floatType"
android:repeatCount="0" />
<!-- 透明度动画,从1变为0.3 -->
<objectAnimator
android:propertyName="alpha"
android:duration="1000"
android:valueFrom="1.0"
android:valueTo="0.3"
android:valueType="floatType"
android:repeatCount="0" />
</set>
代码中使用方式
在代码中通过AnimatorInflater加载XML定义的属性动画,然后设置目标View并启动:
// 加载animator XML文件 Animator animator = AnimatorInflater.loadAnimator(this, R.animator.translate_alpha_anim); // 设置动画作用的View animator.setTarget(targetView); // 启动动画 animator.start();
两种动画XML的注意事项
- Animation-list帧动画如果帧数过多或者图片过大,容易导致内存占用过高,建议控制帧数和单帧图片大小
- 属性动画的propertyName必须对应View的真实属性,并且有对应的getter和setter方法,否则动画不会生效
- Animation-list的动画启动前需要确保View已经附着到窗口,否则可能出现不播放的问题,可以在View的post方法中启动
- 属性动画XML中如果使用了自定义插值器,需要先在res/anim/目录下定义插值器XML,再通过android:interpolator引用
实际开发中可以根据动画需求选择对应的XML定义方式,简单的逐帧效果用Animation-list,复杂的属性变化效果用animator,能大幅提升开发效率。
Animation-listanimatorAndroid动画XML帧动画属性动画修改时间:2026-06-29 17:21:45