Android动画之帧动画(Frame Animation)
程序员文章站
2022-03-16 15:13:35
...
帧动画是一种把一系列可绘制的资源一个接一个的加载出来的动画,这是一种传统的动画,从某种意义上来说,他是由一系列不同的图像组成的,按照顺序播放,看起来就像一卷电影.AnimationDrawable类是动画绘制的基础.
帧动画可以通过一个简单的xml文件来完成,该文件列出了组成动画的框架,存放在res/drawable目录中.在这种情况下,指令是动画的每个帧的顺序和持续时间.
xml文件由<animation-list>元素作为根节点,<item>作为子节点.每个子节点定义帧的持续时间和可绘制的资源,下面是一个帧动画的xml文件示例:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200"/>
<item android:drawable="@drawable/rocket_thrust2" android:duration="200"/>
<item android:drawable="@drawable/rocket_thrust3" android:duration="200"/>
</animation-list>
这个动画只运行三帧.可以通过设置android:oneshot属性来控制动画播放.true表示只播放一次然后停止并保持在最后一帧,false表示动画会循环重复播放. 将该xml文件保存为rocket_thrust.xml.可以将改文件作为一个背景图像添加到视图中.然后调用播放.
AnimationDrawable rocketAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView rocketImage = findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rocketAnimation.start();
}
});
}
需要注意的是start()方法不能在onCreate()中调用.因为AnimationDrawable还没有完全连接到窗口.如果需要立即播放动画而不需要交互,则需要在onStart()方法中调用.