Android中的基础动画 视图动画(View Animation)(View动画、Tween动画)

导读

  • 移动开发知识体系总章(Java基础、Android、Flutter)
  • Android 动画的分类及介绍
  • Android中的属性动画(Property Animation)
  • Android中的逐帧动画(Drawable Animation)
  • Android中的基础动画 属性动画(Property Animation)
  • Android中的视图动画总结

Android中的视图动画(View Animation)(View动画、补间动画)

在Android 动画的分类及介绍说到在Android1.0版本的时候就有了,Tween动画一般直接作用页面中的 View 上,实现基本的动画效果:平移、旋转、缩放、透明度、或前几者的组合,基本效果如下:

View动画中的旋转、平移、缩放、透明动画效果

由于Tween动画的特性被属性动画完美替代,故此,这里就不过多的进行展开,并且Tween动画作用于视图整体,只需设定初始状态(关键帧)和结束状态(关键帧),中间的状态(变化过程)则由系统计算计算并补齐**,由此可见Tween动画的使用核心就是设置开始状态和结束状态。

对应的代码(效果对应上述GIF):

RotateAnimation(旋转动画)

    private void showRotateAnimation () {
        tv2Title.setText("RotateAnimation 旋转动画");
        RotateAnimation rotate = new RotateAnimation(0f, 360f, 
                      Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        LinearInterpolator lin = new LinearInterpolator();
        rotate.setInterpolator(lin);
        rotate.setDuration(3000);
        rotate.setRepeatCount(-1);
        tv2Show.setAnimation(rotate);
    }

TranslateAnimation(平移动画)

   private void showTranslateAnimation () {
        tv3Title.setText("TranslateAnimation 平移动画");
        Animation translateAnimation = new TranslateAnimation(0, 500, 0, 0);
        translateAnimation.setDuration(3000);
        translateAnimation.setRepeatCount(-1);
        tv3Show.startAnimation(translateAnimation);
    }

ScaleAnimation(缩放动画)

    private void showScaleAnimation() {
        tv4Title.setText("ScaleAnimation 缩放动画");
        Animation scaleAnimation = new ScaleAnimation(0, 2, 0, 2,
                   Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleAnimation.setDuration(3000);
        scaleAnimation.setRepeatCount(-1);
        tv4Show.startAnimation(scaleAnimation);
    }

AlphaAnimation(透明度动画)

   private void showAlphaAnimation () {
        tv5Title.setText("AlphaAnimation 透明度动画");
        Animation alphaAnimation = new AlphaAnimation(1, 0);
        alphaAnimation.setDuration(3000);
        alphaAnimation.setRepeatCount(-1);
        tv5Show.startAnimation(alphaAnimation);
    }

AnimationSet (动画集合)

  private void showAnimationSet() {
        tv7Title.setText("组合 动画");
        AnimationSet setAnimation = new AnimationSet(true);
        setAnimation.setRepeatMode(Animation.RESTART);
        setAnimation.setRepeatCount(1);
        Animation rotate = new RotateAnimation(0, 360,
                           Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        rotate.setDuration(1000);
        rotate.setRepeatMode(Animation.RESTART);
        rotate.setRepeatCount(Animation.INFINITE);
        Animation translate = new TranslateAnimation(TranslateAnimation.RELATIVE_TO_PARENT, -0.5f,
                TranslateAnimation.RELATIVE_TO_PARENT, 0.5f,
                TranslateAnimation.RELATIVE_TO_SELF, 0
                , TranslateAnimation.RELATIVE_TO_SELF, 0);
        translate.setDuration(10000);
        Animation alpha = new AlphaAnimation(1, 0);
        alpha.setDuration(3000);
        alpha.setStartOffset(7000);
        Animation scale1 = new ScaleAnimation(1, 0.5f, 1, 0.5f, 
                                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scale1.setDuration(1000);
        scale1.setStartOffset(4000);
        setAnimation.addAnimation(alpha);
        setAnimation.addAnimation(rotate);
        setAnimation.addAnimation(translate);
        setAnimation.addAnimation(scale1);
        tv7Show.startAnimation(setAnimation);

    }

这里就不贴上展示效果了。

Android中的视图动画总结

先看看,旋转动画和透明度动画构造函数:

    public RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {... }
    public AlphaAnimation(float fromAlpha, float toAlpha) {... }
    

旋转动画的构造函数中需要fromDegrees、toDegrees参数,即旋转开始的角度和旋转结束的角度
透明度动画的构造函数中需要fromAlpha、toAlpha参数,即开始动画时的透明度和结束时的透明度
再看平移动画、缩放动画的构造函数:

   public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) {...}
   public ScaleAnimation(float fromX, float toX, float fromY, float toY,
            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {...}
    

平移动画的构造函数中需要fromXDelta、toXDelta、fromYDelta、toYDelta参数,即移动开始时的坐标,和结束时的坐标
缩放度动画的构造函数中需要pivotXType、pivotXValue、pivotYType、pivotYValue参数,即缩放开始时的坐标,和结束时的坐标

果然应对了前面说的View动画作用于视图整体,只需设定初始状态(关键帧)和结束状态(关键帧),中间的状态(变化过程)则由系统计算计算并补齐**,由此可见View动画的使用核心就是设置开始状态和结束状态。无论是设置坐标系,还是设置透明度,都是设置了开始和结束的状态,中间变化的过程由系统补齐。

当然,Tween动画还有很多方法,比如上面通用的:

        xxxAnimation.setDuration(3000);////设置动画持续时间
        xxxAnimation.setRepeatCount(-1);//设置重复次数
        xxxView.startAnimation(xxxAnimation);//开启动画

以及动画监听

alphaAnimation.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {}

            @Override
            public void onAnimationRepeat(Animation animation) { }
        });

最后,Tween动画还有许许多多的方法,由于Tween动画可被属性动画完美替代,就不再继续深入。Tween动画的xml方式后续会在补上

你可能感兴趣的:(Android中的基础动画 视图动画(View Animation)(View动画、Tween动画))