补间动画和逐帧动画不同,补间动画只需要指定动画的起始和结束“关键帧”,然后设置好动画持续时间,至于中间的部分,则由系统计算并补齐。
Android 使用 Animation 代表抽象的动画类,它有四个子类:
可以通过 XML 文件设置动画,也可以直接在 Java 代码中设置,推荐在 XML 当中设置,因为这样可以将业务代码和动画区分开,也相对好维护一些。
有两种方法可以创建 AlphaAnimation:
Java 代码 + XML 文件创建
我们可以在 XML 中描述动画的一些属性,然后再在 Java 代码中实例化该动画对象并设置给组件。
AlphaAnimation 的属性都包含在 <alpha>
元素当中,可用的属性有:
例如我们的其实透明度是 1.0,结束透明度为 0.1
当 repeatMode 为 reverse 的时候,动画重复的规则是:从 1.0 过渡到 0.1,再从 0.1 过渡到 1.0,以此重复;
当 repeatMode 为 restart 的时候,动画重复的规则是:从 1.0 过渡到 0.1,直接回到 1.0 并再过渡到 0.1
在 Java 代码中,调用 AnimationUtils 对象的 loadAnimation 方法将我们的 XML 文件转换为 AlphaAnimation 对象,然后就可以设置给组件并开始动画了。
anim/anim_alpha.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fromAlpha="1.0"
android:toAlpha="0.0"
></alpha>
MainActivity.java
imageView = findViewById(R.id.gif);
AlphaAnimation animation = (AlphaAnimation) new AnimationUtils().loadAnimation(this, R.anim.anim_alpha);
imageView.startAnimation(animation);
Java 代码创建
可以通过 AlphaAnimation 的构造方法创建出 AlphaAnimation 对象,该方法接收两个参数,分别是动画的起始值和结束值。
然后通过一系列方法设置动画参数:
最后调用 View 的 setAnimation 方法将动画对象设置到 View 上,然后再调用动画对象的 start() 或者 startNow() 方法开启动画,也可以直接调用 View 对象的 startAnimation 方法直接启动动画。
需要注意的是,调用 start() 和 startNow 在某些版本上会失效,所以还是建议直接使用 View 对象的 startAnimation 方法启动动画。
可以调用 Animation 对象的 cancel 方法取消动画,调用 View 对象的 clearAnimation 方法也可以取消动画。
public class MainActivity extends Activity {
private ImageView imageView;
private Button start, stop;
private AlphaAnimation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.gif);
start = findViewById(R.id.startAnimation);
stop = findViewById(R.id.stopAnimation);
animation = new AlphaAnimation(1.0f, 0.0f);//透明度从 1.0 到 0.0
animation.setDuration(5000);//动画持续事件为5秒
animation.setStartOffset(2000);//延时2秒执行
animation.setRepeatCount(-1);//无限重复
}
@Override
protected void onStart() {
super.onStart();
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.startAnimation(animation);//启动动画
}
});
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
animation.cancel();//取消动画
}
});
}
}
关于 AlphaAnimation 的其他内容,请看: