Android属性动画分析

来源:互联网 发布:收看日本电视台软件 编辑:程序博客网 时间:2024/06/05 19:44

1、属性动画是3.0之后出来的,在属性动画中有两个属性框架,分别是ObjectAnimator或ValueAnimator,下面我们来详细的介绍它们的用法。

     ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过它的静态工厂类直接返回一个ObjectAnimator对象。

ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",0f,360f);               animator.setDuration(2000);               animator.start();
       这是一个View的旋转动画,第一个参数是View对象,第二个参数是要操作的属性,后面是一个可变数组参数,我这传的是0f到360f是表示控件旋转360度,

填2000参数是表示做这个旋转动画执行2000毫秒。

2、我们来介绍ObjectAnimator操作的属性。

      translationX和translationY:这两个属性作为一种增量来控制这View对象从它布局容器的左上角坐标开始的位置。

      rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。

      scaleX和scaleY:这两个属性控制着View对象围绕他的支点进行2D缩放。

      pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。

      X 和 Y:这是两个简单实用的属性,他描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX,translationY值得累计和。

     alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。

3、要同时使用动画时可以使用PropertyValuesHolder对象来控制translationX,scaleX,scaleY这三个属性。

PropertyValuesHolder  pvh1=PropertyValuesHolder.ofFloat(“translationX”,300f);PropertyValuesHolder  pvh2=PropertyValuesHolder.ofFloat(“scaleX”,1f,0,1f);PropertyValuesHolder  pvh3=PropertyValuesHolder.ofFloat(“scaleY”,1f,0,1f);                      ObjectAnimator.ofPropertyValuesHolder(view,pvh1,pvh2,pvh3)                      .setDuration(1000)                      .start();
4、在来说说ValueAnimator在属性动画中占有非常重要的地位,虽然不想ObjectAnimator那样耀眼但它却是属性动画的核心所在,ObjectAnimator也是继承ValueAnimator。

 ValueAnimator  animator = ValueAnimator.ofFloat(0,100);        animator.setTarget(view);        animator.setDuration(1000);        animator.start();

5、动画事件的监听。

 ValueAnimator  animator = ValueAnimator.ofFloat(0,100);        animator.addListener(new Animator.AnimatorListener() {            @Override            public void onAnimationStart(Animator animation) {                //监听动画开始            }            @Override            public void onAnimationEnd(Animator animation) {               //监听动画结束            }            @Override            public void onAnimationCancel(Animator animation) {              //监听动画取消            }            @Override            public void onAnimationRepeat(Animator animation) {             //监听动画是否重复            }        });        animator.start();
 当然如果使用不了这多的方法,也不需要重写这么的方法 ,Api也提供了这种处理。

  ObjectAnimator animator = ObjectAnimator.ofFloat(this,"translationX",360f);        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {            @Override            public void onAnimationUpdate(ValueAnimator animation) {                //监听动画值            }        });

6、AnimatorSet动画集合

       对于一属性同时作用多个属性动画效果,前面已经用PropertyValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,

同时也能实现更为精确的顺序控制。

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

7.interpolators(插值器)

       插值器是动画中一个非常重要的概念,通过插值器(Interpolators),可以定义动画变换速率,这一点非常类似物理中的加速度,其作用主要是控制目标变量的变化值进行对应的变换。

//自定义Interpolators动画过程public class DecelerateAccelerateInterpolator implements TimeInterpolator {    @Override    public float getInterpolation(float input) {        float result;        if (input <= 0.5) {            result = (float) ((Math.sin(Math.PI*input))/2);        }else {            result = (float) ((2-Math.sin(Math.PI*input))/2);        }        return result;    }}


 












0 0