补间动画
- 渐变
- 缩放
- 平移
- 旋转
Java类 | XML标签 | 效果 |
---|---|---|
AlphaAnimation | alpha | 让透明度渐变 |
ScaleAnimation | scale | 放大或缩小 |
TranslateAnimation | translate | 移动位置 |
RotateAnimation | rotate | 绕某一点旋转 |
两种使用方式
- 第一种:
1、在res中新建anim文件夹,创建xml动画文件,如:res/anim/anim_test.xml
2、在java文件中用这个xml文件生成Animation类
3、调用View的startAnimation来启动动画
- 第二种:
直接在Java文件中new一个 Animation 的子类,然后调用View的startAnimation启动动画
final RotateAnimation animation = new RotateAnimation(0, 180, 50, 50);
animation.setDuration(2000);
btnRun.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ivIc.startAnimation(animation);
}
});
一般推荐使用XML来写补间动画,有以下好处
- xml文件以配置的形式,让动画看起来更直观,可读性强
- 一个动画文件可以被多个View使用,重用性强
- 便于更换动画,更换一个View的动画只要更换load的xml文件就行
Animation的属性
四个子类独有的属性不多,大部分是继承父类Animation的,所以先看Animation的属性
Animation的属性 | 含义 |
---|---|
android:detachWallpaper | 针对Window的动画属性。当一个window在桌面上动画时,是否让桌面壁纸跟着动画,默认是false |
android:duration | 动画执行的时间 |
android:fillAfter | 如果为true,那么动画执行完就会定格在执行完的那个画面,不会恢复到原位 |
android:interpolator | 设置插值器,来控制动画在不同时间段的速度。默认是加速减速插值器 |
android:repeatCount | 动画重复的次数,所以总共会运行的动画次数是这个重复次数+1 |
android:repeatMode | 动画重复的方式,有两个值,reverse和restart。reverse表示动画会正反轮流执行,restart会正方向一直执行 |
android:startOffset | 动画延迟执行的时间,单位是毫秒 |
android:zAdjustment | 可以取三个值,normal:0,top:1,bottom:-1.代表可以在动画过程中调整z轴的顺序。 |
AlphaAnimation的独有属性
AlphaAnimation的独有属性 | 含义 |
---|---|
android:fromAlpha | 动画开始时的透明度,从0-1,0表示完全透明,1表示完全不透明 |
android:toAlpha | 动画结束时的透明度 |
5秒从全透明变成完全不透明
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000">
<alpha
android:fromAlpha="0"
andorid:toAlpha />
</set>
ScaleAnimation的独有属性
ScaleAnimation的独有属性 | 含义 |
---|---|
android:pivotX | 缩放原点的x轴坐标,缩放围绕这个点运行,默认是View的左上角(0, 0) |
android:pivotY | 缩放原点的y轴坐标,XML中的值有三种写法,数值:50;百分数:50%;百分数p:50%p。如果是数值,表示以View的左上角为(0, 0),然后加上数值,以这个点为缩放中心。如果是百分数,表示加上自身高度的50%,作为所放电。如果是百分数p,如50%p,表示加上父控件高度的50%,作为所放电 |
android:fromXScale | 动画开始时,X轴上缩放的比例。1表示本身大小 |
android:fromYScale | 动画开始时,Y轴上缩放的比例。1表示本身大小 |
android:toXScale | 动画结束时,X轴上缩放的比例。1表示本身大小 |
android:toYScale | 动画结束时,Y轴上缩放的比例。1表示本身大小 |
从图片的右下角缩放,宽高各从原来的2倍缩放到原来的十分之一
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<scale
android:pivotX="100%"
andorid:pivotY="100%"
andorid:fromXScale="2"
android:fromYScale="2"
android:toXScale="0.1"
android:toYScale="0.1" />
</set>
TranslateAnimation的独有属性
TranslateAnimation的独有属性 | 含义 |
---|---|
android:fromXDelta | 动画开始时,View左上角的X坐标,也有三种写法,同pivotX |
android:fromYDelta | 动画开始时,View左上角的Y坐标,也有三种写法,同pivotX |
android:toXDelta | 动画结束时,View左上角的X坐标,也有三种写法,同pivotX |
android:toYDelta | 动画结束时,View左上角的Y坐标,也有三种写法,同pivotX |
从自身的左上角移到自身的右下角
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<translate
andorid:fromXDelta="-100%"
android:fromYDelta="-100%"
android:toXDelta="100%"
android:toYDelta="100%" />
</set>
RotateAnimation的独有属性
RotateAnimation的独有属性 | 含义 |
---|---|
android:pivotX | 旋转动画的中心的X坐标,旋转围绕这个点进行,也有三种写法 |
android:pivotY | 旋转动画的中心的Y坐标,旋转围绕这个点进行,也有三种写法 |
android:fromDegrees | 动画开始时的旋转角度,顺序针转增加,逆时针转减少,360度为一圈 |
android:toDegrees | 动画结束时的旋转角度 |
从360度转到-90度
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<rotate
andorid:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="360"
android:toDegrees="-90" />
</set>
组合动画
旋转的同时,改变透明度
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000">
<rotate
andorid:pivotX="50%"
android:pivotY="50%"
android:fromDegrees="360"
android:toDegrees="-90" />
<alpha
android:fromAlpha="1"
android:toAlpha="0.2" />
</set>
插值器
AnimationSet(动画集合类)可以设置集合中的动画是否共享同一个插值器
//true or false
android:shareInterpolator扫描二维码关注公众号,回复: 4078696 查看本文章
Interpolator
Interpolator继承自 TimeInterpolator ,用来定义动画在不同的时间有不同的速度,也叫插补器。
插值器可以在xml文件中用 android:interpolator 设置,也可以在java中通过 animation.setInterpolator 来设置
在java中设置可以传一些参数,对插值器进行更详细的设置,比较灵活。
插值器 | XML中的值 | 作用 |
---|---|---|
AccelerateDecelerateInterpolator | @android:anim/accelerate_decelerate_interpolator | 加速减速插值器,动画先加速,再减速 |
AccelerateInterpolator | @android:anim/accelerate_interpolator | 加速插值器 |
DecelerateInterpolator | @android:anim/decelerate_interpolator | 减速插值器 |
BounceInterpolator | @android:anim/bounce_interpolator | 回弹插值器,动画结束会回弹几下 |
CycleInterpolator | @android:anim/cycle_interpolator | 圆插值器,动画会重复几次,速度沿着正弦曲线变化 |
LinearInterpolator | @android:anim/linear_interpolator | 线性插值器,保持匀速 |
AnticipateOvershootInterpolator | @android:anim/anticipate_overshoot_interpolator | 预期超调插值器,动画开始时往前甩一下,动画结束时往后甩一下 |
AnticipateInterpolator | @android:anim/anticipate_interpolator | 预期插值器,动画开始时会往前甩一下 |
OvershootInterpolator | @android:anim/overshoot_interpolator | 超调插值器,动画结束时往后甩一下 |
对View动画的监听
AnimationListener提供对动画开始,重复和结束的监听
animation.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation animation) {
Log.i(TAG, "动画开始时的操作");
}
@Override
public void onAnimationRepeat(Animation animation) {
Log.i(TAG, "动画重复时的操作");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.i(TAG, "动画结束时的操作");
}
});