一个错误使用Android 属性动画的例子

现在要做个简单的动画效果:
这里写图片描述
错误的实现方法:
1,属性动画非常的方便,也能实现非常好的动画效果,非常强大。但以下使用方式是非常错误的:

/**
 * 教师端课前,课中,查看作业,三个小书动画
 * @param v
 */
public static void setAnim(View v){
    ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(v, "scaleX", 1f, 1.25f, 1f, 1.25f, 1f);
    ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(v, "scaleY", 1f, 1.25f, 1f, 1.25f, 1f);
    ObjectAnimator rotation = ObjectAnimator.ofFloat(v, "rotation", 0f, -15f, 15f, 0f);
    final AnimatorSet set = new AnimatorSet();
    set.play(scaleXAnimator).with(scaleYAnimator).before(rotation);
    set.setDuration(2000);
    set.start();
    set.addListener(new Animator.AnimatorListener(){
        @Override
        public void onAnimationStart (Animator animator) {

        }
        @Override
        public void onAnimationEnd (Animator animator)
        {
            set.start();  //行24
        }
        @Override
        public void onAnimationCancel (Animator animator){

        }@Override
        public void onAnimationRepeat (Animator animator){

        }});
}

使用错误原因:
如果在主线程中这样使用,24行这样的做法相当于一个死循环,很快主线程就oom了

正确用法:
    官方推荐用法:
    PropertyValuesHolder holdeX = PropertyValuesHolder.ofFloat("scaleX", 1f, 1.25f, 1f);
    PropertyValuesHolder holderY = PropertyValuesHolder.ofFloat("scaleY", 1f, 1.25f, 1f);
    ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(v, holdeX, holderY);
    animator.setRepeatCount(ValueAnimator.INFINITE);
    animator.setRepeatMode(ValueAnimator.RESTART);
    animator.setDuration(1000);
    animator.start();

    使用属性的方式设置重复动画效果则不会出现oom(虽然还未证实,但很可能系统api重复动画应该用的子线程,后续继续了解)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值