视图动画即View动画,主要包括四种:TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation,从命名上也是比较好理解的,分
别为平移动画、缩放动画、旋转动画和透明度动画。严格来讲还有一种帧动画,在本书中也放入此视图动画中一并讲解,但是要注意的是,帧动画的
使用和原理与上面四种视图动画并不一样。
视图动画既可以在代码中动态控制,也可以在xml文件中静态预设,从可行性上来讲,一般采用后者,本书同样采用后者来进行讲解。
关于xml文件中一些固定用法,说明如下。
<set>节点表示动画集,可以在其中加入多个子节点,每个子节点都代表一段动画。<set>节点本身拥有一些属性如下所示:
(1) android:interpolator
动画速率。可选值均来源于@android:anim/,如图.
android:interpolator的可选值
默认值为@android:anim/accelerate_decelerate_interpolator,表示动画执行在开始和结束的时候比较慢,在中间的时候比较快。
(2) android:shareInterpolator
共享动画速率。如果设为true,所有的子动画节点将共享同一个动画速率;如果设为false,每个子节点动画将单独设置其动画速率。
(3) android:fillBefore
如果设为true,则动画结束后停留在动画的起始位置。
(4) android:fillAfter
如果设为true,则动画结束后停留在动画的结束位置。
(5) android:duration
动画的持续时长。
(6) android:startOffset
动画执行前的等待时长。
(7) android:repeatMode
动画的重复模式。默认值为restart,该属性只有当android:repeatCount设置成大于0的数或infinite才起作用;还可以设为reverse,表示偶数次显
示动画时会做与动画文件定义的方向相反的动作。
(8) android:repeatCount
动画的重复次数。可以设置为infinite,表示无穷次。
(9) android:fillEnabled
当其设置为true时,android:fillBefore和android:fillAfter才会生效。
(10) android:zAdjustment
动画播放时,Z轴上的位置,一共有三个值:
○1 normal
保持当前的Z轴位置不变。
○2 top
动画播放时,始终在Z轴上层。
○3 bottom
动画播放时,始终在Z轴底层。
(11) android:detachWallpaper
是否在壁纸上运行,默认值是false。如果为true,并且动画窗体有一个壁纸的话,那么动画只会应用给window,壁纸是静态不动的。
1 TranslateAnimation
TranslateAnimation表示平移动画,对应的节点为<translate>,拥有以下属性:
(1) android:fromXDelta
表示x轴的起始位置。
(2) android:toXDelta
表示x轴的终止位置。
(3) android:fromYDelta
表示y轴的起始位置。
(4) android:toYDelta
表示y轴的终止位置。
下面通过实际代码来演示TranslateAnimation的使用,首先是xml文件,位于res/anim/main_animation.xml。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="//schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true" >
<translate
android:duration="3000"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="200"
android:toYDelta="200" />
</set>
程序中使用此动画,如下:
Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.main_animation);
//给mText控件执行动画
mText.startAnimation(animation);
2 ScaleAnimation
ScaleAnimation表示缩放动画,对应的节点为<scale>,拥有以下属性:
(1) android:fromXScale
表示x轴的起始缩放值。
(2) android:toXScale
表示x轴的终止缩放值。
(3) android:fromYScale
表示y轴的起始缩放值。
(4) android:toYScale
表示y轴的终止缩放值。
(5) android:pivotX
表示缩放的中轴点X坐标,距离自身左边缘的位置。
(6) android:pivotY
表示缩放的中轴点X坐标,距离自身上边缘的位置。
下面通过实际代码来演示ScaleAnimation的使用,首先是xml文件,位于res/anim/main_animation.xml。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="//schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true" >
<scale
android:duration="10000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.5"
android:toYScale="1.5" />
</set>
3 RotateAnimation
RotateAnimation表示旋转动画,对应的节点为<rotate>,拥有以下属性:
(1) android:fromDegrees
表示旋转的起始角度值。
(2) android:toDegrees
表示旋转的终止角度值。
(3) android:pivotX
表示旋转的中轴点X坐标,距离自身左边缘的位置。
(4) android:pivotY
表示旋转的中轴点X坐标,距离自身上边缘的位置。
下面通过实际代码来演示RotateAnimation的使用,首先是xml文件,位于res/anim/main_animation.xml。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="//schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true" >
<rotate
android:duration="5000"
android:fromDegrees="10"
android:pivotX="40%"
android:pivotY="60%"
android:toDegrees="180" />
</set>
4 AlphaAnimation
AlphaAnimation表示透明度动画,对应的节点为<alpha>,拥有以下属性:
(1) android:fromAlpha
表示透明度的起始值。
(2) android:toAlpha
表示透明度的终止值。
下面通过实际代码来演示RotateAnimation的使用,首先是xml文件,位于res/anim/main_animation.xml。
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="//schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:shareInterpolator="true" >
<alpha
android:duration="7000"
android:fromAlpha="0.1"
android:toAlpha="1.0" />
</set>
5 帧动画
帧动画就是按照每个图片资源作为动画的一帧,逐张播放。其对应的节点为<animation-list>,其子节点<item>作为动画的一帧,多个<item>子节点
一起组成了帧动画。值得注意的一点是,避免使用过大的图片资源,因为帧动画本身就是加载多张图片资源构成的动画,如果整套资源过大,非常容
易引发内存溢出的现象。
节点有以下属性:
(1) android:drawable
表示引用的图片资源。
(2) android:duration
表示此节点对应的动画的持续时间。
(3) android:oneshot
表示动画是否只显示一次。如果为true,则对应动画只显示一次;如果为false,则动画重复显示。
(4) android:visible
表示初始图片资源是否可见。如果为true,则初始可见;如果为false,则不可见。
下面通过实际代码来演示帧动画的使用,首先是xml文件,位于res/drawable/main_animation。
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="//schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/img0"
android:duration="50"/>
<item
android:drawable="@drawable/img1"
android:duration="50"/>
<item
android:drawable="@drawable/img2"
android:duration="50"/>
</animation-list>
程序中使用此动画,如下:
mText.setBackgroundResource(R.drawable.main_animation);
AnimationDrawable animationDrawable = (AnimationDrawable)mText.getBackground();
animationDrawable.start();