Android动画主要分为三种:帧动画、View动画(补间动画)、属性动画。每种动画的实现原理和它们与视图绘制流程(测量、布局和绘制)之间的关系如下:
1. 帧动画(Frame Animation)
帧动画通过顺序播放一组预先定义好的图片实现动画效果,类似于播放视频。
1.1 实现步骤:
- 在
res/drawable
目录下定义一个XML文件,根节点为<animation-list>
,包含多个<item>
,每个<item>
定义一帧图片及其持续时间。 - 使用
AnimationDrawable
类播放定义好的Drawable中的图片,形成动画效果。
<!-- res/drawable/frame_animation.xml -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/image01" android:duration="500"/>
<item android:drawable="@drawable/image02" android:duration="500"/>
<item android:drawable="@drawable/image03" android:duration="500"/>
</animation-list>
Button button = findViewById(R.id.bt_001);
button.setBackgroundResource(R.drawable.frame_animation);
AnimationDrawable animationDrawable = (AnimationDrawable) button.getBackground();
animationDrawable.start();
1.2 与视图绘制流程的关系:
- 测量(measure):帧动画不会影响视图的测量过程。视图的大小在动画开始前已经确定。
- 布局(layout):帧动画不会影响视图的布局过程。视图的位置在动画开始前已经确定。
- 绘制(draw):帧动画通过切换不同的Drawable来实现。每一帧都会重新绘制视图,因此会调用
invalidate()
方法来触发视图重绘。
2 View动画(补间动画)
View动画通过对视图进行平移、缩放、旋转和透明度变化来实现动画效果,但并不真正改变视图的属性,只是改变了视图在屏幕上的显示效果。
2.1 实现步骤
- 在
res/anim
目录下定义XML文件,描述动画效果。 - 使用
AnimationUtils.loadAnimation
加载动画资源,并通过startAnimation
应用到视图。