美文网首页
Android中的基础动画 视图动画(View Animatio

Android中的基础动画 视图动画(View Animatio

作者: 彭空空 | 来源:发表于2019-11-25 23:03 被阅读0次

    导读

    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 Animatio

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