简介:
Android 开发过程当中,我们会经常想到用一些动画效果让开发出来的app看起来更加高大上,也更加符合人机交互。Android提供了3种动画效果:View Animation、Drawble Animation、Property Animation;
使用:
这里写一下View Animation(Tween Animation),补间动画,给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。
View Animation 只能用在View对象,而且只支持一部分属性改变,如:可以旋转,不能改变背景颜色;
注:View Animation 视觉改变View的大小的时候,只是改变View对象的绘制位置,而没有改变View对象的本身的大小,eg:比如,你有一个Button,坐标(100,100),Width:200,Height:50,而你有一个动画使其变为Width:100,Height:100,你会发现动画过程中触发按钮点击的区域仍是(100,100)-(300,150)。
View Animation就是一系列View形状的变换,如大小的缩放,透明度的改变,位置的改变,动画的定义既可以用代码定义也可以用XML定义,当然,建议用XML定义。
可以给一个View同时设置多个动画,比如从透明至不透明的淡入效果,与从小到大的放大效果,这些动画可以同时进行,也可以在一个完成之后开始另一个。
用XML定义的动画放在/res/anim/文件夹内,XML文件的根元素可以为<alpha>,<scale>,<translate>,<rotate>,interpolator元素或<set>(表示以上几个动画的集合,set可以嵌套)。默认情况下,所有动画是同时进行的,可以通过startOffset属性设置各个动画的开始偏移(开始时间)来达到动画顺序播放的效果。
可以通过设置interpolator属性改变动画渐变的方式,如AccelerateInterpolator,开始时慢,然后逐渐加快。默认为AccelerateDecelerateInterpolator。
在资源文件中定义好动画XML,使用以下方式调用:
ImageView iv_temp= (ImageView)findViewById(R.id.iv_temp);
Animation hyperspaceJumpAnimation=AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
iv_temp.startAnimation(hyperspaceJumpAnimation)
使用详解:
XML定义动画效果:
alpha | 渐变透明度动画 |
scale | 渐变尺寸大小动画 |
translate | 画面转换位置移动动画 |
rotate | 画面旋转动画 |
Java代码中:
AlphaAnimation | 渐变透明度动画 |
ScaleAnimation | 渐变尺寸大小动画 |
TranslateAnimation | 画面转换位置移动动画 |
RotateAnimation | 画面旋转动画 |
alpha:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="20"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
toAlpha:结束透明度
duration:动画时间
roate:
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="300"
android:toDegrees="-360"
android:pivotX="10%"
android:pivotY="100%"
android:duration="10000"
/>
fromDegrees:动画开始时的角度
toDegrees:动画结束时的角度,正代表顺时针
pivotY:动画相对VIew对象的Y轴位置
pivotX:动画相对View对象的X轴位置
duration:动画完成时间
scale:
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.5"
android:fromYScale="0.0"
android:toYScale="1.5"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="0"
android:duration="10000"
android:repeatCount="1"
android:repeatMode="reverse"/>
fromXScale,fromYscale:开始时x,y的长度缩放大小,0.0为不显示,1.0为正常大小
toXScale,toYscale:结束时x,y的长度缩放大小,0.0为不显示,1.0为正常大小
pivotX,pivotY:开始时动画在屏幕的位置,50%即为一半,如上就是为屏幕的中间
startOffset:动画多次执行停顿的时间间隔,如果只是执行一次,在执行前将停顿这个时间间隔
repeatCount:动画重复次数
repeatMode:动画执行模式,reverse:偶数次数时将逆向执行动画;restart:重复执行,一毛一样
translate:
<?xml version="1.0" encoding="utf-8"?>
<scale
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="320"
android:toXDelta="0"
android:fromYDelta="480"
android:toYDelta="0"
android:duration="10000"/>
fromXDelta:开始时X坐标
fromYDelta:开始时Y坐标
toXDelta:结束X坐标
toYDelta:结束Y坐标