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

导读

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方式后续会在补上

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容