Android动画背景自动播放

我们在开发android应用的时候,会遇到加载anim帧动画的图片,其中遇到最多的就是加载图片时候显示动态图,最常见的使用方法就是,设置背景为anim动画,如以下代码:

<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"
                xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:duration="150" android:drawable="@mipmap/ic_loading0" />
    <item android:duration="150" android:drawable="@mipmap/ic_loading1" />
    <item android:duration="150" android:drawable="@mipmap/ic_loading2" />
    <item android:duration="150" android:drawable="@mipmap/ic_loading3" />
    <item android:duration="150" android:drawable="@mipmap/ic_loading4" />
    <item android:duration="150" android:drawable="@mipmap/ic_loading5" />
</animation-list>

不过大多数朋友都会遇到的问题是,动画做好了,但是加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,那么如何解决呢?实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放

我从网上搜集的资料整理了以下三种方法:

方法一:使用Runnalbe()来加载

imageView.setBackgroundResource(R.anim.xxxxx);
final AnimationDrawable animationDrawable =(AnimationDrawable)imageView.getBackground();
imageView.post(new Runnable() {
    @Override
        public void run()  {
            animationDrawable.start();
        }
});
方法二:使用AsyncTask异步加载启动

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
RunAnim runAnim=new RunAnim();
runAnim.execute("");
 
class RunAnim extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            if (!animationDrawable.isRunning()) {
                animationDrawable.stop();
                animationDrawable.start();
            }
            return "";
        }
}
方法三:通过添加addOnPreDrawListener来自动加载

imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);
 
OnPreDrawListener preDrawListener = new OnPreDrawListener(){
    @Override
    public boolean onPreDraw() {
        animationDrawable.start();
        return true; //必须要有这个true返回
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值