一个错误使用Android 属性动画的例子
Posted 魏军强
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个错误使用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重复动画应该用的子线程,后续继续了解)
以上是关于一个错误使用Android 属性动画的例子的主要内容,如果未能解决你的问题,请参考以下文章
一起Talk Android吧(第四百七十五回:渐变类视图动画)
一起Talk Android吧(第四百七十六回:缩放类视图动画)
一起Talk Android吧(第四百七十七回:平移类视图动画)