Android 动画系统汇总

作者: 披甲逐鹿 | 来源:发表于2017-10-10 15:05 被阅读0次

    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(); 

    相关文章

      网友评论

        本文标题:Android 动画系统汇总

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