android view 动画框架

原理:

绘制view时会调用viewGroup中的drawChild函数时,获取view的Animation的Transformation值,then调用canvas.concat(transformToApply.getMatrix),通过矩阵运算完成帧动画。

历史:

 视图动画:AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation、AnimationSet(动画集合)
      开启方法:
           1.实例化AlphaAnimation(举例)
           2.配置属性(set方法,监听器)
           3.view.startAnimation(animation)
      属性动画(Android 3.0):
           较视图动画的优势:具备交互性。
           基础:AnimatorSet 和 ObjectAnimator
           ObjectAnimator使用了一个静态工厂方法创建实例。

ObjectAnimator animatior = ObjectAnimator.ofFloat(button, "translationY", 300 + i * 100); animatior.setDuration(300); LinearInterpolator ll = new LinearInterpolator(); animatior.setInterpolator(ll); animatior.start();

第一个参数是view(整个view必须要有set和get),第二个是要修改的属性【translationX和translationY、rotation和rotationX和rotationY、scaleX和ScaleY、pivotX和pivotY:支点坐标、alpha】,第三个是设置的值。

如果view中得属性没有使用set和get方法,还要使用属性动画,google提供了两个方法来解决这个问题:
1.自定义个属性类或包装类,来间接地给这个属性增加get、set方法。
2.使用ValueAnimatior
public class WrapperView { private View mTarget; public WrapperView(View target){ mTarget = target; } public int getWidth(){ return mTarget.getLayoutParams().width; } public void setWidth(int width){ mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } }
使用时:
WrapperView wrapperView = new WrapperView(button); ObjectAnimator.ofInt(wrapperView,"width",50).setDuration(5000).start();

PropertyValuesHolder

作用:针对同一个对象的多个属性使用动画。
使用方法:
PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationY",300 + i * 100); PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX",1.5f); PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("alpha",0.1f); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(button,pvh1,pvh2,pvh3); animator.setDuration(300);animator.start();

ValueAnimator

ObjectAnimator继承于ValueAnimator。
作用:本身并不具备动画的功能,而是一个数值发生器,用来产生具有一定规律的数字,进而控制动画的实现过程。

AnimatorSet

 既能实现propertyValuesHolder的功能,还能提供更为精确的顺序控制。
 提供play().with().before().after()、playTogether()、playSequentially()

在XML中使用属性动画

在res文件夹下建立animator文件夹,在新建文件scale.xml,内容如下:



在类中以下面的方式调用:

 Animator animator = AnimatorInflater.loadAnimator(this,R.animator.scale);
 animator.setTarget(button);
 animator.start();

一种简便的属性动画书写方式:

android 3.0以后可以直接使用view.animate()使用属性动画。

 button.animate().alpha(0.1f).scaleX(2.0f).y(300).setDuration(300).withStartAction(
    new Runnable() {      
        @Override       
       public void run() {       
       }    
    }).withEndAction(new Runnable() { 
       @Override 
       public void run() {
       }        
}).start();
}});

你可能感兴趣的:(android view 动画框架)