Android帧动画实践

首先创建drawable文件,添加资源文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@color/rate_01"
        android:duration="16"/>
    <item android:drawable="@color/rate_02"
        android:duration="16"/>
    <item android:drawable="@color/rate_03"
        android:duration="16"/>
</animation-list>

布局设置

<ImageView
        android:id="@+id/my_anim"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/my_anima"
        />

代码中控制动画

AnimationDrawable drawable = (AnimationDrawable) binding.myAniView.getDrawable();
        drawable.start();
        drawable.stop();

开启动画
暂停

监听动画结束,切换到下一个动画。AnimationDrawable本身没有动画结束监听,可以自定义AnimationDrawable

public class AnimationDrawableLife extends AnimationDrawable {
    
    
    private AnimationEndListener listener;


    AnimationDrawableLife(AnimationEndListener listener) {
    
    
        this.listener = listener;
    }

    @Override
    public boolean selectDrawable(int index) {
    
    
        if (index != 0 && index == getNumberOfFrames() - 1) {
    
    
            if (listener != null) listener.onAnimationEnd();
        }
        return super.selectDrawable(index);
    }

    interface AnimationEndListener {
    
    
        void onAnimationEnd();
    }
}

使用

AnimationDrawableLife animationDrawableLife = new AnimationDrawableLife(new AnimationDrawableLife.AnimationEndListener() {
    
    
            @Override
            public void onAnimationEnd() {
    
    
                binding.myAniView.setImageDrawable(animationDrawable);
                animationDrawable.start();
            }
        });
        binding.myAniView.setBackground(animationDrawableLife);
        animationDrawableLife.start();

猜你喜欢

转载自blog.csdn.net/weixin_44380181/article/details/129719075