android 动画卡顿优化,Android属性动画卡顿的优化

在开发时,在聊天室内用到属性动画,时间久了卡顿,先看一下效果图:

400a6b7b6008d1aa67e40f32e5c338d9.gif

礼物动画是 SVGA 动画和属性动画配合使用,才达到这样的效果;这是在聊天室内,会不停的刷这种礼物,在测试时,刷到70个左右,出现明显的卡顿现象;

为了解决卡顿的问题,去搜了挺多,最终找到了解决的方法;

先看我之前的写法:

ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, "scaleX", 1.0f);

ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, "scaleY", 1.0f);

AnimatorSet animatorSet = new AnimatorSet();

//动画持续时间

animatorSet.setDuration(500);

//X轴和Y轴同时开始

animatorSet.playTogether(animatorX, animatorY);

//动画开始

animatorSet.start();

上面似乎没什么问题,但时间久了就是卡顿~~~;经过一番折腾,换成了下面的写法 :

private PropertyValuesHolder animatorX;

private PropertyValuesHolder animatorY;

animatorX = PropertyValuesHolder.ofFloat("scaleX", 0f, 1.0f);

animatorY = PropertyValuesHolder.ofFloat("scaleY", 0f, 1.0f);

ObjectAnimator.ofPropertyValuesHolder(view, animatorX, animatorY).start();

换成这样之后,测试送了 200 个礼物也没有明显的卡顿;

有兴趣的可以下载我的小例子(项目中包括:SVGA 动画和属性动画配合使用实现复杂的动画效果,以及对属性动画的优化,解决卡顿的问题):

GitHub 下载地址:https://github.com/wuqingsen/Animation

到这里就讲完了,下面是其他的一些推荐写法,在这里做一下记录.:

先看下面的写法:

AnimatorSet animSet = new AnimatorSet();

ObjectAnimator transYFirstAnim = ObjectAnimator.ofFloat(mView, "translationY", 0, 100);

ObjectAnimator transYSecondAnim = ObjectAnimator.ofFloat(mView, "translationY", 100, 0);

animSet.playSequentially(transYFirstAnim, transYSecondAnim);

将上面的写法替换为:

Keyframe k0 = Keyframe.ofFloat(0f, 0); //第一个参数为“何时”,第二个参数为“何地”

Keyframe k1 = Keyframe.ofFloat(0.5f, 100);

Keyframe k2 = Keyframe.ofFloat(1f, 0);

PropertyValuesHolder p = PropertyValuesHolder.ofKeyframe("translationY", k0, k1, k2);

ObjectAnimator objectAnimator = ObjectAnimator.ofPropertyValuesHolder(mView, p);

objectAnimator.start();

导致卡顿的最关键的还是内存泄漏,如果补间动画可以代替的话,还是使用补间动画,补间动画不会出现此问题。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值