概述:
Android的视图动画由5种类型组成:
alpha: 渐变透明度动画效果
scale: 渐变尺寸伸缩动画效果
translate: 画面变换位置移动动画效果
rotate: 画面转移旋转动画效果
set: 定义动画集
动画文件存放位置:
res/anim文件夹下,访问时使用R.anim.XXX
也可以放在res/drawable,访问时使用R.drawable.XXX
5个类型的属性:
1.通用属性:
这些属性在Animation类里,其它5个类都继承自该类
android:duration: 动画总持续时间,以毫秒为单位
android:fillAfter: 如果为true,动画结束时,保持动画结束时的状态
android:fillBefore: 如果为true,动画结束时,还原到初始状态
android:fillEnabled: 如果为true,动画结束时,还原到初始状态
Android:repeatCount: 动画重复次数,当值为infinite时,表示无循环
android:repeatMode: 设定重复类型,有reverse和restart两个值,reverse表示倒叙回放,restart表示重放,并且必须与-repeatCount一起使用才有效果
android:interpolator: 设定插值器,就是指动画效果,比如弹跳效果等
2.scale标签:
功能说明:
scale标签用于缩放动画,可以实现动态调整控件尺寸的效果
该标签有以下属性:
android:fromXScale="XXX" 动画起始时,控件在X轴的大小(相对自身的缩放比例,浮点值(结尾不能加f),1.0代表自身无变化,0.5代表缩小,2.0代表放大)
android:toXScale="XXX" 动画结束时,控件在X轴的大小(相对自身的缩放比例,浮点值)
android:fromYScale="XXX" 动画起始时,控件在Y轴的大小(相对自身的缩放比例,浮点值)
android:toYScale="XXX" 动画结束时,控件在Y轴的大小(相对自身的缩放比例,浮点值)
android:pivotX="XXX"
X轴的起始位置,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前视图的原点(左上角为原点)加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:pivotY="XXX"
Y轴的起始位置,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
示例:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1.0"
android:toXScale="0.4"
android:fromYScale="1.2"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700"
android:fillBefore="true"
android:repeatCount="1"
android:repeatMode="reverse"
/>
效果图:
点击回弹的合理效果:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fillBefore="true"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="1"
android:repeatMode="reverse"
android:toXScale="0.9"
android:toYScale="0.9" />
3.alpha标签:
功能说明:
用于实现渐变透明度动画效果
该标签有以下属性:
android:fromAlpha: 动画开始时的透明度,取值范围0.0~1.0,0.0表示全透明,1.0表示不透明
android:toAlpha: 动画结束时的透明度,取值范围0.0~1.0,0.0表示全透明,1.0表示不透明
示例:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="3000"
android:fillBefore="true">
</alpha>
效果图:
4.rotate标签:
功能说明:
用于实现画面转移旋转动画效果
该标签有以下属性:
android:fromDegrees: 动画开始时的角度位置,正值代表顺时针方向的度数,负值代表逆时针方向的度数
android:toDegrees: 动画结束时的角度位置,正值代表顺时针方向的度数,负值代表逆时针方向的度数
android:pivotX: 旋转中心点X轴坐标,默认旋转中心点是控件坐标原点,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点(左上角)加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:pivotY: 旋转中心点Y轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
示例:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="-650"
android:duration="3000"
android:fillAfter="true">
</rotate>
效果图:
5.translate标签:
功能说明:
用于实现画面变换位置移动动画效果
该标签有以下属性:
android:fromXDelta: 起始点X轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的X轴原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:fromYDelta: 起始点Y轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的Y轴原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:toXDelta: 终点X轴坐标
android:toYDelta: 终点Y轴坐标
示例:
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="-80"
android:fromYDelta="0"
android:toYDelta="-80"
android:duration="2000">
</translate>
效果图:
6.set标签:
功能说明:
前面4个标签只能完成特定功能,而set标签可以把这些动画效果组合起来
属性:
set标签本身没有属性,它的属性都是从Animation类继承而来的,当这些属性用于set标签时,就会对set标签下的所有子控件产生作用
注意:在set标签中设置repeateCount属性是无效的,必须对每个动画单独设置才有效
示例:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
<scale
android:fromXScale="0.0"
android:toXScale="1.4"
android:fromYScale="0.0"
android:toYScale="1.4"
android:pivotX="50%"
android:pivotY="50%"/>
<rotate
android:fromDegrees="0"
android:toDegrees="720"
android:pivotX="50%"
android:pivotY="50%"/>
</set>
效果图:
实例:
使用动画文件:
功能说明:
发起命令让开始动画
1.加载动画文件:
构造函数:
AnimationUtils:public static Animation loadAnimation(Context context, int id)
参数:
context: context上下文
id: 动画资源文件
示例:
Animation setAnim = AnimationUtils.loadAnimation(AnimationXMLActivity.this,R.anim.setanim);
2.使用动画文件:
构造函数:
View:public void startAnimation(Animation animation)
参数:
animation: 动画资源
示例:
Animation setAnim = AnimationUtils.loadAnimation(AnimationXMLActivity.this,R.anim.setanim);
继承自View的控件对象.startAnimation(scaleAnim);
给Activity设置启动和finish动画:
一定要放在跳转Activity之后(紧挨着StartActivity后面)
overridePendingTransition(R.anim.dynamic_preview_enter,R.anim.dynamic_preview_exit);
退出动画在对应的Activity里重写finish方法:
@Override
public void finish() {
super.finish();
overridePendingTransition(R.anim.dynamic_preview_enter,R.anim.dynamic_preview_exit);
}