一个错误使用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吧(第四百七十五回:渐变类视图动画)

一起学Android之Animation

一起Talk Android吧(第四百七十六回:缩放类视图动画)

一起Talk Android吧(第四百七十七回:平移类视图动画)

一起Talk Android吧(第四百七十七回:平移类视图动画)

一起Talk Android吧(第四百七十九回:集合类视图动画)