本文引自:http://www.cnblogs.com/feisky/archive/2010/01/11/1644482.html ,略有增删
- Animations:可以实现Android UI的动画效果,可以分为两大类:
- Tween Animation:一种渐变动画,通过对UI图像不断做变换(平移,缩放,旋转,透明度变化)产生动画效果
- Frame Animation:图像切换动画,按照指定的时间间隔顺序播放事先做好的图像
- Tween Animation常用的类包括:
- Animation:抽象基类
- AlphaAnimation:渐变透明度
- RotationAnimation:旋转
- ScaleAnimation:渐变尺寸缩放
- AnimationSet:动画集合,对UI同时使用多种动画时使用
- 使用Tween Animation的步骤如下:
- 创建AnimationiSet对象
- 创建Animation对象,可以多个,添加到AnimationSet中
- 使用控件对象开始执行AnimationSet
- Interpolator:定义了动画变化的速率,Animations框架中定义了如下几种Interpolator:
- AccelerateDecelerateIntepolator:动画开始和结束的地方速率改变较慢,中间较快
- AccelerateInterpolator:动画加速改变
- CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦权限
- DecelerateInterpolator:动画减速改变
- LinearInterpolator:动画匀速改变
- 使用Xml定义Tween Animation:动画的XML文件在工程中res/anim目录,这个文件必须包含一个根元素,可以使<alpha><scale> <translate> <rotate>插值元素或者是把上面的元素都放入<set>元素组中,默认情况下,所以的动画指令都是同时发生的,为了让他们按序列发生,需要设置一个特殊的属性startOffset。动画的指令定义了你想要发生什么样的转换,当他们发生了,应该执行多长时间,转换可以是连续的也可以是同时的。加载xml中定义的动画使用AnimationUtils类的loadAnimation方法
//main.xml中的ImageView ImageView image = (ImageView) findViewById(R.id.image); //加载动画 Animation animation =AnimationUtils.loadAnimation(this, R.anim.rotationAnimation); //显示动画 image.startAnimation(animation);
Tween Animation共同的节点属性
属性[类型] 功能 备注 Duration[long] 属性为动画持续时间 时间以毫秒为单位 fillAfter [boolean] 当设置为true ,该动画转化在动画结束后被应用 fillBefore[boolean] 当设置为true ,该动画转化在动画开始前被应用 interpolator
指定一个动画的插入器 有一些常见的插入器
accelerate_decelerate_interpolator
加速-减速 动画插入器
accelerate_interpolator
加速-动画插入器
decelerate_interpolator
减速- 动画插入器
其他的属于特定的动画效果repeatCount[int] 动画的重复次数 RepeatMode[int] 定义重复的行为 1:重新开始 2:plays backward startOffset[long] 动画之间的时间间隔,从上次动画停多少时间开始执行下个动画 zAdjustment[int] 定义动画的Z Order的改变 0:保持Z Order不变
1:保持在最上层
-1:保持在最下层表二
XML节点 功能说明 alpha 渐变透明度动画效果 <alpha
android:fromAlpha=”0.1″
android:toAlpha=”1.0″
android:duration=”3000″ />fromAlpha 属性为动画起始时透明度
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字duration为动画持续时间,ms单位
toAlpha
属性为动画结束时透明度
表三
scale 渐变尺寸伸缩动画效果 <scale
android:interpolator= “@android:anim/accelerate_decelerate_interpolator”
android:fromXScale=”0.0″
android:toXScale=”1.4″
android:fromYScale=”0.0″
android:toYScale=”1.4″
android:pivotX=”50%”
android:pivotY=”50%”
android:fillAfter=”false”
android:startOffset=“700”
android:duration=”700″
android:repeatCount=”10″ />fromXScale[float] fromYScale[float] 为动画起始时,X、Y坐标上的伸缩尺寸 0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大toXScale [float]
toYScale[float]为动画结束时,X、Y坐标上的伸缩尺寸 pivotX[float]
pivotY[float]为动画相对于物件的X、Y坐标的开始位置 属性值说明:从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 表四
translate 画面转换位置移动动画效果 <translate
android:fromXDelta=”30″
android:toXDelta=”-80″
android:fromYDelta=”30″
android:toYDelta=”300″
android:duration=”2000″ />fromXDelta
toXDelta为动画、结束起始时 X坐标上的位置 fromYDelta
toYDelta为动画、结束起始时 Y坐标上的位置 表五
rotate 画面转移旋转动画效果 <rotate
android:interpolator=”@android:anim/accelerate_decelerate_interpolator”
android:fromDegrees=”0″
android:toDegrees=”+350″
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”3000″ />fromDegrees 为动画起始时物件的角度 说明
当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转)
(负数from——to负数:逆时针旋转)
(正数from——to正数:顺时针旋转)
(正数from——to负数:逆时针旋转)toDegrees 属性为动画结束时物件旋转的角度 可以大于360度 pivotX
pivotY为动画相对于物件的X、Y坐标的开始位 说明:以上两个属性值 从0%-100%中取值
表示使用相对于控件本身定位,当值为”50”表示绝对位置定位,当值为”50%p”表示相对于父控件定位
- Frame animation:可以在XML Resource定义(还是存放到resanim文件夹下),也可以使用AnimationDrawable中的API定义。由于Tween Animation与Frame Animation有着很大的不同,因此XML定义的格式也完全不一样,其格式是:首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画,当前帧的drawable资源和当前帧持续的时间。下面对节点的元素加以说明:
- AnimationListener:一个监听器,在动画执行的各个阶段会得到通知,从而调用相应的方法,AnimationListener的方法包括:
- onAnimatioinEnd(Animation animation):动画结束时调用
- onAnimationRepeat(Animation animation):动画重复时调用
- onAnimationStart(Animation animation):动画开始时调用
XML属性 | 说明 |
drawable | 当前帧引用的drawable资源 |
duration | 当前帧显示的时间(毫秒为单位) |
oneshot | 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。 |
variablePadding | If true, allows the drawable’s padding to change based on the current state that is selected. |
visible | 规定drawable的初始可见性,默认为flase; |
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true"> <item android:drawable="@drawable/rocket_thrust1" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust2" android:duration="200" /> <item android:drawable="@drawable/rocket_thrust3" android:duration="200" /> </animation-list>