Android动画之帧动画(Frame Animation)

帧动画是一种把一系列可绘制的资源一个接一个的加载出来的动画,这是一种传统的动画,从某种意义上来说,他是由一系列不同的图像组成的,按照顺序播放,看起来就像一卷电影.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()方法中调用.

猜你喜欢

转载自blog.csdn.net/xujian197/article/details/83655276