补间动画
补间(Tween)动画通过对View进行一系列的图形变换来实现动画效果,其中图像变换包括平移、缩放、旋转、改变透明度等。补间动画最常用的方式是通过XML文件定义动画。
透明度渐变动画(AlphaAnimation)
主要通过指定动画开始时View的透明度和动画结束时View的透明度以及动画持续时间来实现
| 属性 | 介绍 |
|---|---|
| interpolator | 控制指定动画的变化速度,可设置的值有:linear(匀速改变)、accelerate(先慢后快)等 |
| repeatMode | 用于指定动画重复的方式,可设置的值有reverse(反向)、restart(重新开始) |
| repeatCount | 用于指定动画重复次数,该属性的值可以是正整数,也可以是infinite(无限循环) |
| fromAlpha | 用于指定动画开始时View的透明度,0.0为完全透明,1.0为不透明 |
| toAlpha | 用于指定动画结束时View的透明度 |
| duration | 用于指定动画播放时长 |
alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><alphaandroid:interpolator="@android:anim/linear_interpolator"android:repeatMode="reverse"android:repeatCount="2"android:duration="1000"android:fromAlpha="1.0"android:toAlpha="0.0"></alpha>
</set>
旋转动画(RotateAnimation)
通过对View指定逗号开始时的旋转角度、结束时的旋转角度以及动画播放时长来实现
| 属性 | 介绍 |
|---|---|
| fromDegress | 指定动画开始时的角度 |
| toDegress | 指定动画结束时的角度 |
| pivotX | 指定旋转点的X坐标 |
| pivotY | 指定旋转点的Y坐标 |
对于属性pivotX(pivotY同理),可以是整数、百分数、百分数p,若属性值为50,表示在当前View左上角的X轴左边加上50px的位置为旋转点的X坐标,50%表示在当前View左上角的X坐标加上自己宽度的50%作为旋转点的X坐标,50%p(p表示parent)表示在当前View左上角的X轴坐标加上父控件宽度的50%作为旋转点的X坐标。
rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><rotateandroid:fromDegrees="0"android:toDegrees="360"android:pivotX="50%"android:pivotY="50%"android:repeatMode="reverse"android:repeatCount="2"android:duration="1000"/>
</set>
缩放动画(ScaleAnimation)
通过对动画指定开始时的缩放系数、结束时的缩放系数以及动画持续时长来实现
| 属性 | 介绍 |
|---|---|
| fromXScale | 指定动画开始时X轴上的系数,值为1.0表示不变化 |
| fromYScale | 指定动画结束时Y轴上的系数,值为1.0表示不变化 |
| toXScale | 指定动画结束时X轴上的系数,值为1.0表示不变化 |
| toYScale | 指定结束开始时Y轴上的系数,值为1.0表示不变化 |
| pivotX | 指定缩放点的X坐标 |
| pivotY | 指定缩放点的Y坐标 |
scale.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><scaleandroid:fromXScale="1.0"android:fromYScale="1.0"android:toXScale="0.5"android:toYScale="0.5"android:pivotX="50%"android:pivotY="50%"android:repeatMode="reverse"android:repeatCount="2"android:duration="3000"/>
</set>
平移动画(TranslateAnimation)
通过指定动画开始位置、结束位置以及动画持续时长来实现的
| 属性 | 介绍 |
|---|---|
| fromXDelta | 指定动画开始时View的X坐标 |
| fromYDelta | 指定动画开始时View的Y坐标 |
| toXDelta | 指定动画结束时View的X坐标 |
| toYDelta | 指定动画结束时View的Y坐标 |
translate.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromXDelta="0.0"android:fromYDelta="0.0"android:toXDelta="100"android:toYDelta="0.0"android:repeatCount="2"android:repeatMode="reverse"android:duration="1000"/>
</set>
编写界面交互代码:
TweenActivity
public class TweenActivity extends AppCompatActivity implements View.OnClickListener {private ImageView iv_tween;private Button bt1,bt2,bt3,bt4;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tween);iv_tween=findViewById(R.id.iv_tween);bt1=findViewById(R.id.bt1);bt2=findViewById(R.id.bt2);bt3=findViewById(R.id.bt3);bt4=findViewById(R.id.bt4);bt1.setOnClickListener(this);bt2.setOnClickListener(this);bt3.setOnClickListener(this);bt4.setOnClickListener(this);iv_tween.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt1:Animation alpha= AnimationUtils.loadAnimation(this,R.anim.alpha);iv_tween.startAnimation(alpha);break;case R.id.bt2:Animation rotate= AnimationUtils.loadAnimation(this,R.anim.rotate);iv_tween.startAnimation(rotate);break;case R.id.bt3:Animation scale= AnimationUtils.loadAnimation(this,R.anim.scale);iv_tween.startAnimation(scale);break;case R.id.bt4:Animation translate= AnimationUtils.loadAnimation(this,R.anim.translate);iv_tween.startAnimation(translate);break;}}
}
渐变

旋转

缩放

移动

逐帧动画
逐帧(frame)动画是按照事先准备好的动态图像顺序播放的,利用人眼的视觉暂留原理让用户产生动画的错觉
首先创建frame动画资源
frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/wifi01" android:duration="300"></item><item android:drawable="@drawable/wifi02" android:duration="300"></item><item android:drawable="@drawable/wifi03" android:duration="300"></item><item android:drawable="@drawable/wifi04" android:duration="300"></item><item android:drawable="@drawable/wifi05" android:duration="300"></item><item android:drawable="@drawable/wifi06" android:duration="300"></item>
</animation-list>
编写界面交互代码
frameActivity
//播放drawable文件类private AnimationDrawable animationDrawable;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_frame);ImageView iv_wifi=findViewById(R.id.iv_content);Button bt_start=findViewById(R.id.bt_start);Button bt_stop=findViewById(R.id.bt_stop);//需要做强转animationDrawable= (AnimationDrawable) iv_wifi.getBackground();}public void stop(View view) {animationDrawable.stop();}public void start(View view) {animationDrawable.start();}















