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