逐帧动画解析

2022-02-12  本文已影响0人  彩虹_直至黑白

帧动画通过顺序播放一系列图像从而产生动画效果,可以简单理解为图片切换动画,很显然,如果图片过多过大就会导致OOM。
不同于View动画,系统提供了另外一个类AnimationDrawable来使用帧动画,帧动画的使用比较简单。首先需要通过XML来定义一个AnimationDrawable。

 <?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/a0" android:duration="100"/>
        <item android:drawable="@drawable/a1" android:duration="100"/>
        <item android:drawable="@drawable/a2" android:duration="100"/>
        <item android:drawable="@drawable/a3" android:duration="100"/>
        <item android:drawable="@drawable/a4" android:duration="100"/>
        <item android:drawable="@drawable/a5" android:duration="100"/>
        <item android:drawable="@drawable/a6" android:duration="100"/>
        <item android:drawable="@drawable/a7" android:duration="100"/>
        <item android:drawable="@drawable/a8" android:duration="100"/>
        <item android:drawable="@drawable/a9" android:duration="100"/>
        <item android:drawable="@drawable/a10" android:duration="100"/>
        <item android:drawable="@drawable/a11" android:duration="100"/>
    </animation-list>

然后将上述的Drawable作为View的背景并通过Drawable来播放动画即可:

            // 载入动画
            btn_startFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 1. 设置动画
                    iv.setImageResource(R.drawable.knight_attack);
                    // 2. 获取动画对象
                    animationDrawable = (AnimationDrawable) iv.getDrawable();
                    // 3. 启动动画
                    animationDrawable.start();
                    
                }
            });

            // 停止动画
            btn_stopFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                    // 1. 设置动画
                    iv.setImageResource(R.drawable.knight_attack);
                    // 2. 获取动画对象
                    animationDrawable = (AnimationDrawable) iv.getDrawable();
                    // 3. 暂停动画
                    animationDrawable.stop();
                }
            });
上一篇 下一篇

猜你喜欢

热点阅读