Android 设置属性动画AnimatorSet设置pause无效问题

27 篇文章 1 订阅
19 篇文章 0 订阅
前言

项目中做广告页动画,要求页面不可见(onpause、onstop)暂停动画执行,于是:

/**
*初始化动画、以及相关动画执行
*/
AnimatorSet set = new AnimatorSet();
            set.playTogether(animator, animator1);// 同时执行
            set.setDuration(mLoadingTime * 1000);
            set.setInterpolator(new LinearInterpolator());
            set.start();
            set.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    clearAnimation();

                    if (loadingFinishListener != null) {
                        loadingFinishListener.finish();
                    }
                }
            });
            // 判断动画是否执行
					if(isPause)set.pause;
					else set.resume;

结果发现居然不可以,明明我调用的是官方的API为什么我设置动画暂停却不起作用呢?自己当时老是绕不过来,后来想了很久:

其实AnimatorSet这个动画管理类他内部一个堆栈的实现形式,你每次创建一个动画的时候他都会放入这个队列中,这就导致了,你调用set.pause关闭的并不是上一次执行的动画而是本次的,所以,需要判空,正确用法是:

  if (set == null) {
            set = new AnimatorSet();
            set.playTogether(animator, animator1);// 同时执行
            set.setDuration(mLoadingTime * 1000);
            set.setInterpolator(new LinearInterpolator());
            set.start();
            set.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    super.onAnimationEnd(animation);
                    clearAnimation();

                    if (loadingFinishListener != null) {
                        loadingFinishListener.finish();
                    }
                }
            });
        }
        if (!isPuase && set != null) {
            set.pause();
        } else {
            set.resume();
        }
    }

定义全局的AnimatorSet,使用之前判断AnimatorSet是否存在,不存在的情况下再去创建一个对象,这样就保证了我调用set.pause是我创建的那个动画,才能执行有效。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值