Android 动画(二)帧动画 AnimationDrawable

使用AnimationDrawable实现帧动画

帧动画是一种比较传统的动画,它是由一系列不同的图像创建的,按照顺序播放,就像播放电影一样。
虽然可以使用AnimationDrawable类在代码中定义与使用动画,但使用单个XML文件定义帧动画会更简单。

XML文件由一个元素作为根节点和一系列子节点组成,每个子节点定义一个框架:一个可绘制的框架资源和帧持续时间。

注意:不能在onCreate()调用AnimationDrawable的start()方法,因为AnimationDrawable还没有完全加载到Activity中。如果你想要立即播放动画而不需要交互,那么你可以从Activity的onStart()中的方法调用该动画的start()方法,这样当该Activity的视图可见时,该动画将会自动播放。

这里有一个Activity示例,其中动画添加到一个ImageView动画中,然后点击按钮 启动/停止 动画:

以下是可绘制动画的示例XML文件:

该动画仅运行36帧,每一帧持续100ms。通过将android:oneshot 列表属性设置为true,它将循环一次,然后停止并保持最后一帧。如果它设置为false,则动画将循环。将这个xml保存在res/drawable/anim_draw_loading.xml中,可以将其作为背景图像添加到View中,然后可以调用播放。

drawable/anim_draw_loading.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/pointer_wait_0" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_1" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_2" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_3" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_4" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_5" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_6" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_7" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_8" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_9" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_10" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_11" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_12" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_13" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_14" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_15" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_16" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_17" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_18" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_19" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_20" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_21" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_22" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_23" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_24" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_25" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_26" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_27" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_28" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_29" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_30" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_31" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_32" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_33" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_34" android:duration="100" />
    <item android:drawable="@drawable/pointer_wait_35" android:duration="100" />

</animation-list>

java 代码:

    /**
     * 开始动画
     */
    private void startDrawableAnimation(){
        ivImage.setBackgroundResource(R.drawable.anim_draw_loading);
        animationDrawable = (AnimationDrawable) ivImage.getBackground();
        animationDrawable.setOneShot(false);//设置是否只执行一次
        animationDrawable.stop();
        animationDrawable.start();
    }

    /**
     * 停止动画
     */
    private void stopDrawableAnimation(){
        animationDrawable.stop();
    }

注:anim_draw_loading.xml中的资源素材可以在Android源码中找到,具体位置为:
android-7.1.1_r1\frameworks\base\core\res\res\drawable-mdpi
实现的效果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/MakerCloud/article/details/81043194