Android 动画系统汇总

Android动画系统的种类:

1. 属性动画 (Property Animation)

2. 补间动画 (Tween Animation)

3. 帧动画     (Frame Animation)

4. Drawable

属性动画(Property Animation):

可以改变控件对象属性的对象,譬如控件的位置,透明度,旋转等。

包含两个基本的Animator:

1.ValueAnimator : 提供一个动画时序引擎,用来计算动画时序内,动画的值。

使用方式:
private void valueAnimatorTest(final View view) { 
      ValueAnimator anim = new ValueAnimator(); //创建ValueAnimator
      anim.setDuration(2000);  // 设置动画时常
      anim.setObjectValues(new My()); //设置自定义初始值
      anim.setEvaluator(new TypeEvaluator<My>() { 
              @Override
              public My evaluate(float fraction, My startValue, My endValue) {
                    System.out.println(“fraction = ” + fraction);
                    // fraction:动画执行时间片段
                    My my = new My();  // My是一个实体类,可以自定义View的各个属性值
                    return my;
              }
      });
    anim.addUpdateListener(new AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                      My value = (My)valueAnimator.getAnimatedValue(); // 得到当前动画片段的计算的自定义值,用来改变控件的属性
              }
      });
      anim.start();
}

2. ObjectAnimator:是ValueAnimator的子类,这里对属性进行了一层逻辑实现,使用者可以直接通过动画改变控件属性。

translationX、translationY            控制View相对于父布局平移距离
rotation、rotationX、rotationY     控制旋转
scaleX、scaleY                            控制X 、Y轴方向的缩放
pivotX、pivotY                             缩放和旋转的支点,默认为View的中心
alpha                                            透明度(0~1)
x、y                                              在父控件中的位置(注意和translationX、translationY的区分)

使用方式:
1. 控制单个属性动画
ObjectAnimator anim = ObjectAnimator.ofFloat(view, “scaleX”, 1.0F,  0.0F).setDuration(500);
anim.start();

2. 控制多个属性动画
ObjectAnimator anim = ObjectAnimator.ofFloat(view, “anywords”, 1.0F,  0.0F).setDuration(500);
anim.addUpdateListener(new AnimatorUpdateListener(){
          @Override
          public void onAnimationUpdate(ValueAnimator animation){
                    float cVal = (Float) animation.getAnimatedValue();
                    view.setAlpha(cVal);
                    view.setScaleX(cVal);
                    view.setScaleY(cVal);
          }
}
anim.start();

补间动画 (Tween Animation)

比较简单,与属性动画相比,只能改变控件的显示状态,不能实际改变控件属性值,主要有四中:

1. ScaleAnimation
2. RotateAnimation
3. AlphaAnimation
4. TranslateAnimation

补间动画相对简单,具体实现方式可参考其构造方法即可。

帧动画    (Frame Animation)

顾名思义,就是与电影的播放原理一样,逐帧显示图片达到动画的效果,实现方式:

1. 在res目录下建立 drawable 文件夹
2. 在drawable文件夹目录下创建  frame.xml 文件
3. frame.xml文件格式

<xml version=”1.0″ encoding=”utf-8″?>
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android”>
  <item android:drawable=”@drawable/pic1″ android:duration=”200″/>
  <item android:drawable=”@drawable/pic2″ android:duration=”200″/>
  <item android:drawable=”@drawable/pic3″ android:duration=”200″/>
</animation-list>

4. 应用在ImageView中

<ImageView
    ….
   android:src = “@drawable/frame”
/>

5.  代码启动动画

AnimationDrawable animationDrawable = (AnimationDrawable) view.getDrawable();
animationDrawable.start(); 

    原文作者:披甲逐鹿
    原文地址: https://www.jianshu.com/p/182659325520
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞