美文网首页
Android属性动画

Android属性动画

作者: wt龙 | 来源:发表于2017-07-06 18:04 被阅读33次

    Android 的动画分为三类: 帧动画、补间动画、属性动画; 而动画的效果分为四类:透明度、旋转、平移、缩放;

    我们要学习的属性动画,在Android3.0之后推出,帮助开发者实现更加丰富的动画效果;属性动画改编了3.0之前动画框架Animation存在的一些局限性----动画只改变显示,不改变点击效果,(意思就是,我把一个button从a左边移动到了b坐标,但是我们点击b坐标的按钮没有效果,还需要去点击a坐标才会响应点击事件,这就给我们造成了很多不必要的麻烦)

    在Animator框架中,我们使用最多的就是AnimatorSet 和ObjectAnimator配合,使用ObjectAnimator精细化控制,只控制一个对象的一个属性值,然后组合到AnimatorSet行成一个动画 ;
    最重要的是: 属性动画通过调用属性的get、set方法来真实的控制view的属性值,因此强大的属性动画框架,基本可以实现所有的动画效果;

    ObjectAnimator

                ObjectAnimator  animator = ObjectAnimator.ofFloat(view , "translationX", 300 );
                animator.setDuration(300);
                animator.start();
    

    这是一个简单的平移操作,调用ObjectAnimator 的静态工厂方法,创建一个对象,第一个参数就是我们要控制的view,第二个参数就是要进行操控的属性,第三个参数是可变数组参数,这里我们只设置了一个300 ,即向右平移300;

    PropertyValuesHolder

            PropertyValuesHolder propertyValuesHolder1 = PropertyValuesHolder.ofFloat("translationX", 400);
            PropertyValuesHolder propertyValuesHolder2 = PropertyValuesHolder.ofFloat("alpha", 0.5f);
            PropertyValuesHolder propertyValuesHolder3 = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);
            PropertyValuesHolder propertyValuesHolder4 = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);
            ObjectAnimator.ofPropertyValuesHolder(view,propertyValuesHolder1, propertyValuesHolder2,     
            propertyValuesHolder3, propertyValuesHolder4).setDuration(1000).start();
    

    PropertyValuesHolder 类似动画中的AnimationSet ,在属性动画中,如果针对同一个对象的多个属性,要同时控制多种动画, 可以通过PropertyValuesHolder 来实现。

    ValueAnimator

            ValueAnimator valueAnimator = ValueAnimator.ofFloat(0,100);
            valueAnimator.setTarget(v);
            valueAnimator.setDuration(1000).start();
    
            valueAnimator.addUpdateListener(new  ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    Float value  =(Float) animation.getAnimatedValue();
                        //TODO  use  the value
                }
            });
    

    ValueAnimator 在属性动画中占有非常重要的地位, (虽然我并没有感受到0.0),
    ValueAnimator 本身 不提供任何动画效果,一段代码写完,屏幕点碎了,没见什么动静,真是糟心啊;
    ValueAnimator 的一般使用方法是在AnimatorUpdateListener中监听数值的变化 ,从而完成动画的变化;

    AnimatorSet

            ObjectAnimator animator1 = ObjectAnimator.ofFloat(v, "translationX", 300);
            ObjectAnimator animator2 = ObjectAnimator.ofFloat(v, "scaleX", 1f, 0, 1f);
            ObjectAnimator animator3 = ObjectAnimator.ofFloat(v, "scaleY", 1f, 0, 1f);
            AnimatorSet animatorSet = new AnimatorSet();
            animatorSet.setDuration(1000);
            animatorSet.playTogether(animator1, animator2, animator3);
            animatorSet.start();
    

    对于一个属性同事作用多个属性动画效果, 前面已经用PropertyValuesHolder 实现过了,但是呢,请广大彩民同志注意了,"playTogether",顾名思义,AnimatorSet不仅能实现这样的效果,还可以精确的控制动画执行的顺序;
    AnimaotrSet正是通过 playTogether()、playSequentially()、animSet.play().with()、before()、after()这些方法来控制多个动画的协同工作方式;
    what ? 什么意思? 百度!

    相关文章

      网友评论

          本文标题:Android属性动画

          本文链接:https://www.haomeiwen.com/subject/tkahhxtx.html