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

Android 逐帧动画(Frame)

程序员文章站 2022-03-18 18:47:17
...

Android 逐帧动画(Frame)

Android 逐帧动画(Frame)  很好理解就是将多张图片放到一个容器里面通过控制这些图片一帧一张图片从而形成动画

使用的使用通过AnimationDrawable 加载放好的图片 然后通过调用start 和stop 开启和暂停动画

第一种方法:通过xml 来实现

首先需要在animation-list.xml 来存放图片

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item
        android:drawable="@drawable/girl_1"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_2"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_3"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_4"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_5"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_6"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_7"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_8"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_9"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_10"
        android:duration="300" />
    <item
        android:drawable="@drawable/girl_11"
        android:duration="300" />
</animation-list>

java 代码 包含xml 实现和java 代码实现动画

public class FrameActivity extends AppCompatActivity {
    private Button startBtn; // 开始动画按钮
    private Button stopBtn; // 停止动画按钮
    private ImageView imageView, image; // 显示图片
    private AnimationDrawable anim, animationDrawable;

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.frame_activity_layout);
        // 实例化控件
        startBtn = findViewById(R.id.start);
        stopBtn = findViewById(R.id.stop);
        imageView = findViewById(R.id.image);
        image = findViewById(R.id.img);

        anim = new AnimationDrawable();
        for (int i = 1; i < 6; i++) {
            int id = getResources().getIdentifier("img" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            anim.addFrame(drawable, 500);
            imageView.setImageDrawable(anim);


        }

        // 指定动画的帧的列表
        image.setBackgroundResource(R.drawable.boy_and_girl);
        // AnimationDrawable--与逐帧动画相关的Drawable
        animationDrawable = (AnimationDrawable) image.getBackground();

        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 开始动画
                anim.start();
                animationDrawable.start();

            }
        });

        stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 暂停动画
                anim.stop();
                animationDrawable.stop();
            }
        });
    }
}

这样就实现了上面动画的效果很简单,但是自己从来不用,因为ui从来没有给自己提供过这么多图片,

自己也是在一个老项目中看到了,这里回顾下,之前写过这个demo 这里给出demo 地址

demo 地址如果有不清楚的地方可以点击查看。