Day6 动画二:补间动画
一.效果
1.平移动画(TranslateAnimation)
2.旋转动画(RoateAnimation)
3.透明度动画(AlphaAnimation)
4.缩放动画(ScaleAnimation)
二.透明度动画
1.方式一:xml实现
基本属性:
- android:fromAlpha 动画开始的透明度,从0.0 -1.0 ,0.0表示全透明,1.0表示完全不透明
- android:toAlpha 动画结束时的透明度,也是从0.0 -1.0 ,0.0表示全透明,1.0表示完全不透明
其他属性:
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
0- android:duration 动画的持续时长,以毫秒为单位
alphaFile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0"
android:toAlpha="1"
android:duration="2000"
>
</alpha>
Java代码:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.alphafile);
iv.startAnimation(animation);
2.方式二:java代码实现
private void createAlphaAnimation() {
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);//透明度从0到1 渐渐显示 1到0 渐渐隐藏
alphaAnimation.setDuration(2000);//设置时长
alphaAnimation.setRepeatCount(3);//设置循环次数
alphaAnimation.setRepeatMode(Animation.REVERSE);//倒叙
tweenAnimImg.startAnimation(alphaAnimation);
}
三.平移动画Translate
1.方式一:xml实现
基本属性:
- android:fromXDelta 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
- android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
- android:toXDelta 结束点X轴坐标
- android:toYDelta 结束点Y轴坐标
其他属性:
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
0- android:duration 动画的持续时长,以毫秒为单位
translatefile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="1"
android:toYScale="2"
android:duration="2000"
android:pivotX="50%"
android:pivotY="50%"
>
</scale>
Java代码:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.translatefile);
iv.startAnimation(animation);
2.方式二:java代码实现
//平移
private void createTranslateAnimation() {
//方式一:参数一 x起始位置 参数二 x终止位置 参数三 y起始位置 参数四 y终止位置
TranslateAnimation translateAnimation = new TranslateAnimation(0, 50, 0, 50);
//方式二(设置参照点):参数一 x起始位置参照形式 参数二 x起始位置 参数三 x终止位置参照形式 参数四 x终止位置 参数五 y起始位置参照形式 参数六 y起始位置 参数七 y终止位置参照形式 参数八 y终止位置
TranslateAnimation translateAnimation1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1);
translateAnimation1.setDuration(2000);
tweenAnimImg.startAnimation(translateAnimation1);
}
三.旋转动画Roate
1.方式一:xml实现
基本属性:
- android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
- android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
- android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
其他属性:
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
0- android:duration 动画的持续时长,以毫秒为单位
roatefile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="-50"
android:toDegrees="50"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount = "5"
android:repeatMode="reverse"
android:duration="2000"
>
</rotate>
Java代码:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.roatefile);
iv.startAnimation(animation);
2.方式二:java代码实现
//旋转
private void createRoateAnimation() {
//方式一:参数一 起始角度 参数二 终止角度
RotateAnimation rotateAnimation = new RotateAnimation(90, 180);
//方式二(设置参照点): 参数一 起始角度 参数二 终止角度 参数三:x参照旋转点形式 参数四:x的0.5倍 参数五:y参照旋转点形式 参数六:y的0.5倍
RotateAnimation rotateAnimation1 = new RotateAnimation(90, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation1.setDuration(2000);//设置时长
rotateAnimation1.setFillAfter(true);//动画结束是画面停留在此动画的最后一帧
// rotateAnimation1.setFillBefore(false);//动画结束时画面停留在此动画的第一帧
tweenAnimImg.startAnimation(rotateAnimation1);
}
四.缩放动画Scale
1.方式一:xml实现
基本属性:
- android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
- android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
- android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
- android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
- android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。
- android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。
其他属性:
- android:duration 动画持续时间,以毫秒为单位
- android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
- android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
- android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
- android:repeatCount 重复次数
- android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
- android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。
0- android:duration 动画的持续时长,以毫秒为单位
scalefile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="1"
android:toYScale="2"
android:duration="2000"
android:pivotX="50%"
android:pivotY="50%"
>
</scale>
Java代码:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleefile);
iv.startAnimation(animation);
2.方式二:java代码实现
//缩放
private void createScaleAnimation() {
//方式一:参数一 x起始大小 参数二 x终止大小 参数三 y起始大小 参数四 y终止大小
ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.5f, 1, 0.5f);
//方式二(设置参照点):参数一 x起始大小 参数二 x终止大小 参数三 y起始大小 参数四 y终止大小 参数五:x参照旋转点形式 参数六:x的0.5倍 参数七:y参照旋转点形式 参数八:y的0.5倍
ScaleAnimation scaleAnimation1 = new ScaleAnimation(1, 2, 1, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation1.setDuration(2000);
tweenAnimImg.startAnimation(scaleAnimation1);
}
五.组合动画Set
1.方式一:xml实现
setfile.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="4000"
></alpha>
<rotate
android:fromDegrees="-50"
android:toDegrees="50"
android:pivotX="50%"
android:pivotY="50%"
android:duration="4000"
></rotate>
<scale
android:fromXScale="1"
android:toXScale="2"
android:fromYScale="1"
android:toYScale="2"
android:pivotX="50%"
android:pivotY="50%"
android:duration="4000"
></scale>
<translate
android:fromXDelta="0"
android:toXDelta="100%"
android:fromYDelta="0"
android:toYDelta="200%"
android:duration="4000"
></translate>
</set>
Java代码:
Animation animation = AnimationUtils.loadAnimation(this, R.anim.scaleefile);
iv.startAnimation(animation);
2.方式二:java代码实现
//动画集合:从屏幕左侧移动到右侧,渐渐显示,移动到屏幕正中心,旋转并放大2倍,在缩小到原来位置
private void createAnimationSet() {
//2.通过代码生成方式
AnimationSet animationSet = new AnimationSet(true); //true表示共用同一个插值器
//透明度从0至1
AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);
//旋转两圈
RotateAnimation rotateAnimation = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//放大三倍
ScaleAnimation scaleAnimation = new ScaleAnimation(0.1f, 3, 0.1f, 3, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//平移距离x方向为父控件宽的35%,y方向为父控件高的42.5%
TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.35f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.425f);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(translateAnimation);
//设置动画时长为3秒
animationSet.setDuration(3000);
//设置插值器为先加速再减速
animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
//动画完成后保持位置
animationSet.setFillAfter(true);
//开始动画
tweenAnimImg.startAnimation(animationSet);
}
六.差值器
1.通过xml设置差值器
<set
xmlns:android="http://schemas.android.com/apk/res/android"
<!--运动结束时弹起-->
android:interpolator="@android:anim/bounce_interpolator">
<!--平移动画标签-->
<translate
android:fromXDelta="0%p"
android:toXDelta="20%p"
android:fromYDelta="0%p"
android:toYDelta="20%p"
android:duration="4000"/>
<!--缩放动画标签-->
</set>
2.通过java代码设置差值器
//旋转
private void createRoateAnimation() {
//方式一:参数一 起始角度 参数二 终止角度
RotateAnimation rotateAnimation = new RotateAnimation(90, 180);
//方式二(设置参照点): 参数一 起始角度 参数二 终止角度 参数三:x参照旋转点形式 参数四:x的0.5倍 参数五:y参照旋转点形式 参数六:y的0.5倍
RotateAnimation rotateAnimation1 = new RotateAnimation(90, 180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
rotateAnimation.setInterpolator(new BounceInterpolator());//设置差值器
tweenAnimImg.startAnimation(rotateAnimation1);
}
七.动画监听:
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
Log.i(TAG, "动画开始时做操作: ");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i(TAG, "动画重复时做操作: ");
}
@Override
public void onAnimationRepeat(Animation animation) {
Log.i(TAG, "动画结束时做操作: ");
}
});