欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()方法中调用.