安卓中的动画有:视图动画(也叫补间动画,tween动画)、Drawable动画(也叫Frame动画、帧动画)和Property动画(属性动画)。
视图动画
在一个视图容器内执行一系列简单变换(位移、缩小放大、旋转、透明度),使用这个动画时,控件的点击的区域还是在原来的位置上,并不会因为视图移动而点击区域发生改变。
创建视图动画有两种方式:代码创建和xml。
java类名 | xml关键字 | 描述信息 |
---|---|---|
AlphaAnimation | <alpha> | 渐变透明度动画效果 |
RotateAnimation | <rotate> | 画面转移旋转动画效果 |
ScaleAnimation | <scale> | 渐变尺寸伸缩动画效果 |
TranslateAnimation | <translate> | 画面转换位置移动动画效果 |
AnimationSet | <set> | 一个持有其它动画元素alpha、scale、translate、rotate或者其它set元素的容器 |
Animation抽象类是所有补间动画类的基类,所以基类会提供一些通用的动画属性。所有视图动画都具备此属性,可以设置一个或多个。
xml属性 | java方法 | 解释 |
---|---|---|
android:detachWallpaper | setDetachWallpaper(boolean) | 是否在壁纸上运行 |
android:duration | setDuration(long) | 动画持续时间,毫秒为单位 |
android:fillAfter | setFillAfter(boolean) | 控件动画结束时是否保持动画最后的状态 |
android:fillBefore | setFillBefore(boolean) | 控件动画结束时是否还原到开始动画前的状态 |
android:fillEnabled | setFillEnabled(boolean) | 与android:fillBefore效果相同 |
android:interpolator | setInterpolator(Interpolator) | 设定插值器(指定的动画效果,譬如回弹等) |
android:repeatCount | setRepeatCount(int) | 重复次数 |
android:repeatMode | setRepeatMode(int) | 重复类型有两个值,reverse表示倒序回放,restart表示从头播放 |
android:startOffset | setStartOffset(long) | 调用start函数之后等待开始运行的时间,单位为毫秒 |
android:zAdjustment | setZAdjustment(int) | 表示被设置动画的内容运行时在Z轴上的位置(top/bottom/normal),默认为normal |
Alpha动画属性
xml属性 | java方法 | 解释 |
---|---|---|
android:fromAlpha | AlphaAnimation(float fromAlpha, …) | 动画开始的透明度(0.0到1.0,0.0是全透明,1.0是不透明) |
android:toAlpha | AlphaAnimation(…, float toAlpha) | 动画结束的透明度,同上 |
Rotate动画属性
xml属性 | java方法 | 解释 |
---|---|---|
android:fromDegrees | RotateAnimation(float fromDegrees, …) | 旋转开始角度,正代表顺时针度数,负代表逆时针度数 |
android:toDegrees | RotateAnimation(…, float toDegrees, …) | 旋转结束角度,正代表顺时针度数,负代表逆时针度数 |
android:pivotX | RotateAnimation(…, float pivotX, …) | 旋转起点X坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:pivotY | RotateAnimation(…, float pivotY) | 缩放起点Y坐标,同上规律 |
RotateAnimation rotate = new RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,int pivotYType);默认ABSOLUTE
RotateAnimation rotate = new RotateAnimation(float fromDegrees,float toDegrees,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue);
参数1:旋转开始角度;参数2:旋转的结束角度;参数3:X轴的旋转模式,可取值ABSOLUTE 、RELATIVE_TO_SELF、RELATIVE_TO_PARENT;参数4:X坐标的伸缩值;参数5:Y轴的旋转模式,可取值ABSOLUTE 、RELATIVE_TO_SELF、RELATIVE_TO_PARENT;参数6:Y坐标的伸缩值。
Scale动画属性
xml属性 | java方法 | 解释 |
---|---|---|
android:fromXScale | ScaleAnimation(float fromX, …) | 初始X轴缩放比例,1.0表示无变化 |
android:toXScale | ScaleAnimation(…, float toX, …) | 结束X轴缩放比例 |
android:fromYScale | ScaleAnimation(…, float fromY, …) | 初始Y轴缩放比例 |
android:toYScale | ScaleAnimation(…, float toY, …) | 结束Y轴缩放比例 |
android:pivotX | ScaleAnimation(…, float pivotX, …) | 缩放起点X轴坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:pivotY | ScaleAnimation(…, float pivotY) | 缩放起点Y轴坐标,同上规律 |
ScaleAnimation scale = new ScaleAnimation(float fromX,float toX,float fromY,float toY,float pivotX,float pivotY) ;
ScaleAnimation scale = new ScaleAnimation(float fromX,float toX,float fromY,float toY,int pivotXType,float pivotXValue,int pivotYType,float pivotYValue) ;
参数1:起始X轴方向上的大小,取值0-1;参数2:结束X轴方向上的大小,取值0-1;参数3:起始Y轴方向上的大小,取值0-1;参数4:结束Y轴方向上的大小;参数5:X轴的缩放模式,RELATIVE_TO_SELEF以自己为标准、RELATIVE_TO_PARENT以父组件为标准、ABSOLUTE表示绝对位置;参数6:针对前一个参数的值,取值0-1之间;参数7和8同之前。
例:ScaleAnimation scale = new ScaleAnimation(1f,0f,1f,0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f) ;
Translate动画属性
xml属性 | java方法 | 解释 |
---|---|---|
android:fromXDelta | TranslateAnimation(float fromXDelta, …) | 起始点X轴坐标(数值、百分数、百分数p,譬如50表示以当前View左上角坐标加50px为初始点、50%表示以当前View的左上角加上当前View宽高的50%做为初始点、50%p表示以当前View的左上角加上父控件宽高的50%做为初始点) |
android:fromYDelta | TranslateAnimation(…, float fromYDelta, …) | 起始点Y轴从标,同上规律 |
android:toXDelta | TranslateAnimation(…, float toXDelta, …) | 结束点X轴坐标,同上规律 |
android:toYDelta | TranslateAnimation(…, float toYDelta) | 结束点Y轴坐标,同上规律 |
Animation类的方法 | 解释 |
---|---|
reset() | 重置Animation的初始化 |
cancel() | 取消Animation动画 |
start() | 开始Animation动画 |
setAnimationListener(AnimationListener listener) | 给当前Animation设置动画监听 |
hasStarted() | 判断当前Animation是否开始 |
hasEnded() | 判断当前Animation是否结束 |
View类的常用动画操作方法 | 解释 |
---|---|
startAnimation(Animation animation) | 对当前View开始设置的Animation动画 |
clearAnimation() | 取消当View在执行的Animation动画 |
Drawable动画
Drawable动画就是Frame动画,它允许你实现像播放幻灯片一样的效果,这种动画的实质是Drawable,所以定义在res/drawable目录下。
xml和java代码都能实现
xml中使用:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true" > true:表示执行一次,false:表示玄幻执行 item:类似一帧的动画资源 <item android:drawable="" android:duration=""></item>drawable:一个frame的Drawable资源;duration:一个frame显示多长时间 </animation-list>AnimationDrawable的start()方法不能再Activity的onCreate方法中调用,因为AnimationDrawable还未完全附着到Window上,所以最好的调用时机是onWindowFocusChanged()方法中
mIvAnim.setBackgroundResource(R.drawable.drawable_anim); AnimationDrawable drawable = (AnimationDrawable) mIvAnim.getBackground(); drawable.start();