天天看点

Android动画基础 -- 帧动画

Android的动画主要分为三类,分别是帧动画、补间动画和属性动画。

本篇博客来看帧动画的实现。

一、什么是帧动画

帧动画一般用来实现较为复杂的个性化动画,通过一系列的图片循环播放,形成视觉上的动画效果。

二、帧动画的特点

在使用帧动画的时候,一定要避免使用过大的图片,以免引起OOM。

帧动画的优点在于使用简单、方便。

三、如何使用

首先将动画资源,即每张图片资源放到drawable文件夹里,这里可以再网上随便照一张gif图,然后使用gif分解软件将gif分解成一张张图片即可

然后可以通过xml或者java代码进行设置

1)java代码方式

AnimationDrawable animationDrawable = new AnimationDrawable();
        for (int i = 0; i <= 25; i++) {
            int id = getResources().getIdentifier("gif" + i, "drawable", getPackageName());
            Drawable drawable = getResources().getDrawable(id);
            animationDrawable.addFrame(drawable, 100);
        }

        
        //开启动画
        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                animationDrawable.setOneShot(true);
                iv.setImageDrawable(animationDrawable);
                // 获取资源对象
                animationDrawable.stop();
                 // 特别注意:在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次
                animationDrawable.start();
                // 启动动画
               
            }
        });

       
        //停止动画
        stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                animationDrawable.setOneShot(true);
                iv.setImageDrawable(animationDrawable);
                animationDrawable.stop();
            }
        });
           

2)xml方式

在res/anim的文件夹里创建动画效果.xml文件

然后设置动画资源

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true" // 设置是否只播放一次,默认为false
    >

// item = 动画图片资源;duration = 设置一帧持续时间(ms)
    <item android:drawable="@drawable/gif0" android:duration="100"/>
    <item android:drawable="@drawable/gif0" android:duration="100"/>
    <item android:drawable="@drawable/gif0" android:duration="100"/>
    ...
    <item android:drawable="@drawable/gif11" android:duration="100"/>
    <item android:drawable="@drawable/gif12" android:duration="100"/>
    <item android:drawable="@drawable/gif13" android:duration="100"/>
</animation-list>
           

最后在代码中设置启停

//开始动画
        startBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                iv.setImageResource(R.drawable.你的路径);
                // 1. 设置动画
                animationDrawable = (AnimationDrawable) iv.getDrawable();
                // 2. 获取动画对象
                animationDrawable.start();
                // 3. 启动动画
            }
        });
        //停止动画
        stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
                iv.setImageResource(R.drawable.你的路径);
                // 1. 设置动画
                animationDrawable = (AnimationDrawable) iv.getDrawable();
                // 2. 获取动画对象
                animationDrawable.stop();
                // 3. 暂停动画
            }
        });