Android 基础之-View Animation(视图动画)

462 阅读5分钟

概述

随着开发的深入,动画在开发中的运用会越来越多,如Activity的切入切出,从底部弹出一个dialog,都需要动画的辅助,,如果想加入一些绚丽的动画效果就更需要学习一下Animation了

Android 中的动画分为两类,View Animation(视觉动画) 和 Property Animator(属性动画) ,两者还是有一定区别的。

  • View Animation 包括 Tween Animation(补间动画) 和 Frame Animation(帧动画)

  • Property Animator 包括Value Animator 和 Object Animator

两者的差异:

  • 引入的时间不同 View Animation 在Android 1.0 (API 1)就引入了,,而 Property Animator 是在Android 3.0 (API 11)才引入的

  • 所在的包也不相同 View Animation 在包android.view.animation中 而 Property Animator 在包 android.animation中

  • 动画的命名也不相同 View Animation 的命名都是以Animation命名的 ,而Property Animator 都是以Animator命名的

  • View Animation 是改变视图控件的外在展示 ,而无法改变它原来的属性 ,而Property Animator 是改变视图控件的属性

  • View Animation仅能对指定的控件做动画,而Property Animator是通过改变控件某一属性值来做动画的。 (和上一条雷同)

而今天我们重点讲解一下View Animation

View Animation

官方文档有四部分组成

  • alpha 透明渐变动画效果
  • scale 尺寸大小渐变动画效果
  • translate 移动渐变动画效果
  • rotate 旋转动画渐变效果

今天主要是通过定义xml的形式介绍View Animation 定义的动画xml要放在 res/anim资源文件夹中 首先看一下Animation的基本属性

  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等

1:alpha (透明度)*

  • android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明

2:scale (尺寸)

  • android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
  • android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
  • android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
  • android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标 android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样

3:translate (移动)

  • android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
  • android:toXDelta 结束点X轴坐标 ,可以是数值、百分数、百分数p 三种样式;
  • android:toYDelta 结束点Y轴坐标 ,可以是数值、百分数、百分数p 三种样式;

4:rotate (旋转)

  • android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数 如 0
  • android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数 如 270
  • android:pivotX 旋转点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:pivotY 旋转点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p

5:set(集合 上面每中只能展示一种动画 ,而set可以把他们集合起来。。)

xml展示

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000">

    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"/>
    <scale
        android:pivotY="50%"
        android:pivotX="50%"
        android:fromXScale="0"
        android:fromYScale="0"
        android:toXScale="1"
        android:toYScale="1"/>

    <rotate
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="0"
        android:toDegrees="360"
        />

    <translate
        android:fromXDelta="-200"
        android:fromYDelta="-200"
        android:toXDelta="0"
        android:toYDelta="0"
        />
</set>

代码的用法

 Animation animation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.view_animation_alpha);
    animation.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {

        }

        @Override
        public void onAnimationEnd(Animation animation) {
            show_imageView.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) {

        }
    });
    show_imageView.startAnimation(animation);

插值器 Interpolator

Interpolator属性是Animation类的一个XML属性,alpha、scale、rotate、translate、set都有这个属性 Interpolator的系统值有下面几个:

  • @android:anim/accelerate_decelerate_interpolator - AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时候加速
  • @android:anim/accelerate_interpolator - AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
  • @android:anim/anticipate_interpolator - AnticipateInterpolator 开始的时候向后然后向前甩
  • @android:anim/anticipate_overshoot_interpolator - AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
  • @android:anim/bounce_interpolator - BounceInterpolator 动画结束的时候弹起
  • @android:anim/cycle_interpolator - CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
  • @android:anim/decelerate_interpolator - DecelerateInterpolator 在动画开始的地方快然后慢
  • @android:anim/linear_interpolator - LinearInterpolator 以常量速率改变
  • @android:anim/overshoot_interpolator - OvershootInterpolator 向前甩一定值后再回到原来位置