Android属性动画

简介:Android3.0之前,Animation存在一些局限性,动画改变的只是显示,并不能响应事件,在Android3.0之后,Google提出了属性动画来改变这一现状。
在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator配合,使用ObjectAnimator来进行更加精细的控制,只控制着一个对象的一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成了一个动画。而且ObjectAnimator能够自动驱动,可以调用setFrameDelay(long frameDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁绘制界面,在不影响动画效果的前提下减少CPU资源消耗。重要的是,属性动画通过调用属性的get、set方法来真实的控制有一个View的属性值,因此,强大的属性动画框架,基本可以实现所有的动画效果。
ObjectAnimator
ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过静态工厂类直接返回一个ObjectAnimator对象,参数:一个对象,和对象的属性值,

private void translate() {
//参数3为平移的距离,可有正负
// ObjectAnimator animator = ObjectAnimator.ofFloat(objButton,”translationX”,300);

        //参数3为旋转的角度
        //ObjectAnimator animator1 = ObjectAnimator.ofFloat(objButton,"rotation",360);
        // animator.setDuration(3000);
        //animator.start();

        /*
        * ofFloat()方法的第一个参数表示动画操作的对象(可以是任意对象),
        * 第二个参数表示操作对象的属性名字(只要是对象有的属性都可以),
        * 第三个参数之后就是动画过渡值。当然过度值可以有一个到N个,
        * 如果是一个值的话默认这个值是动画过渡值的结束值。如果有N个值,动画就在这N个值之间过渡。
        * 在代码中,通过PropertyValuesHolder.ofFloat()控制着translationX,scaleX,scaleY的属性,最后调用
        *  ObjectAnimator.ofPropertyValuesHolder()来实现多属性动画的共同作用。
        *
        *
        PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationX",300f);
        PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX",1f, 0, 1f);
        PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY",1f, 0, 1f);
        ObjectAnimator.ofPropertyValuesHolder(objButton,pvh1,pvh2,pvh3).setDuration(2000).start();
        */

        /*
        * 用AnimatorSet实现一个属性同时对应多个属性的动画,它不仅可以实现这种效果,还可以更加精确的控制顺序.
        * 在属性动画中,AnimatorSet正是通过playTogether()、playSequentially()、animSet.play().with()、before()
        * after()这些方法来控制多个动画的协同工作方式。从而做到对动画播放顺序的精确控制。
        *

       ObjectAnimator animator2 = ObjectAnimator.ofFloat(objButton,"translationX",300f);
        ObjectAnimator animator3 = ObjectAnimator.ofFloat(objButton,"scaleX",1f, 0, 1f);
        ObjectAnimator animator4 =ObjectAnimator.ofFloat(objButton,"scaleY",1f,0,1f);

        AnimatorSet as = new AnimatorSet();
        as.setDuration(2000);
        as.playTogether(animator2,animator3,animator4);
        as.start();
        */
    }

在XML中定义属性动画

你可能感兴趣的:(动画)