Android的动画可以分为三种:View动画、帧动画和属性动画,其实帧动画也属于View动画的一种,只不过它和平移、旋转等常见的View动画在表现形式上略有不同而已。

1. View动画

View动画的作用对象时View,支持4种动画效果:平移动画、缩放动画、旋转动画和透明度动画。其实帧动画也属于View动画,但是帧动画的表现形式跟上面的四种变化效果不太一样。下面我们介绍的View动画不特殊说明均指上面的四种变换。

1.1View动画的种类

View动画的四种变换对应着Animation的四个子类:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation。这四种动画既可以通过XML来定义也可以通过代码来动态的创建。

四种View动画

我们先用XML创建View动画:

View 动画XML

从上面可以看出,View动画可以是单个动画也可以是组合的。标签表示动画的集合,对应的是AnimationSet类,它可以包含多个动画,内部可以嵌套。

android:interpolator:表示动画集合采用的插值器,插值器影响动画的速度,比如匀速非匀速等,默认为加减速插值器如上图所示@android:anim/accelerate_decelerate_interpolator。

android:shareInterpolator:表示集合中的动画和集合共享同一个插值器,如果集合不指定插值器,那么自动化需要单独指定所需的插值器或使用默认。

表示平移动画,android:fromXDelta="1" 表示开始的X轴位置,android:toXDelta="2"表示结束的X轴位置;android:fromYDelta="1",android:toYDelta="2"表示Y轴。

表示缩放动画,android:fromXScale="1dp"android:toXScale="2dp",表示X轴缩放的开始结束值,android:fromYScale="1dp"android:toYScale="2dp"表示Y轴,android:pivotX="1"android:pivotY="1"表示的轴点的位置。一般取View的中心点,具体的根据动画的实际需求。

表示旋转动画,android:fromDegrees="0"android:toDegrees="180",表示旋转开始的跟结束的角度,android:pivotX="1"android:pivotY="1"表示轴点的位置,具体位置根据动画的实际需求。

表示透明度动画    android:fromAlpha="1"  android:toAlpha="0.1" ,表示透明度开始与结束值。1表示不透明。

除了上面介绍的一些属性,还有一些常用的属性:

android:duration="10"  表示动画的时间,

android:fillAfter="false" 表示动画结束View是否停留在动画结束的位置。

android:fillBefore="false"表示动画开始View是否停留在动画开始的位置。

View动画的使用:

View动画的用法如下图,view_animation即为在anim目录下创建的动画XML文件。

View动画的简单用法

1.2自定义动画

下面我们做一个3D旋转的效果,继承Animation抽象类,重写initialize初始化参数,重写applyTransformation方法进行矩阵变换即可,如下图:

自定义3D旋转动画

1.3帧动画

帧动画其实比较简单,类似于播放连续的图片,帧动画需要AnimationDrawable来实现。

帧动画

帧动画的使用:

帧动画的使用

2 View动画的特殊使用场景

2.1 LayoutAnimation

LayoutAnimation用在ViewGroup上,为ViewGroup指定一个动画,其子元素出场是都会有动画,一般ListView上用的比较多。LayoutAnimation也是一个View动画。

(1)定义LayoutAnimation:

LayoutAnimation
android:animation="@anim/animation_item" 指定子元素动画
android:animationOrder="normal" 子元素动画顺序
android:delay="0.5" 动画延时,以子元素动画时间为标准,及子元素500ms,0.5表示延时150ms

(2)定义子元素动画:

子View动画

(3)为ViewGroup指定动画:

ListView 指定动画

LayoutAnimation的使用,下图也给出了不使用用XML方式给ViewGroup指定动画:

LayoutAnimation的使用

NOTE:项目上传到了github:https://github.com/siling1990/AIDLDemo.git