专题介绍:专题准备
专题一:Android动画专题之逐帧动画
专题二:Android动画专题之补间动画
终于写到了最后的主角,前面的动画虽然也有效果,但是都有着自己的局限性。而今天就是强大的主角到来了!!!
正文开始
还是先来看看官网是如何介绍的(官网点击此处)
很长的一段介绍,但我们需要记住这个特征就好——可以对任何对象执行属性动画,可以定义任何属性的变化。
下面还介绍了我们在使用属性动画时应该定义的特性:
- Duration:这个应该很熟悉了,就是之前tweened animation中用到的动画持续时间。默认值是300ms。
- interpolation:这个词有的翻译成了加速器,又得说叫插值,我是直接记单词了,跟在使用tweened animation一样。
- 重复次数和行为:可以用来定义动画结束后是否重复(重复几次)和结束后的行为(从结束的那一帧开始倒着播放到第一帧还是怎样)
- 动画集合:使用一组属性动画,可以顺序播放,同时播放。
- 帧刷新频率:定义动画的帧多久刷新一次,默认是10ms。
介绍属性动画不可避免的要介绍下Animator这个框架,它就是3.0后推出的新的动画框架。可以简单的看下这个官网的介绍:
相关API介绍
Animators
- ValueAnimator:时间引擎,计算属性动画的值。使用它计算并监听值更新来更新相关对象的属性值。
- ObjectAnimator:属性动画中经常使用的一个类,它是ValueAnimator的子类。使用它对指定对象的属性执行动画。
- AnimatorSet:组合多个Animator,指定多个Animator的播放顺序。
Evaluators控制属性动画如何计算属性值。
Evaluators
- IntEvaluator:计算int类型的属性值
- FloatEvaluator:计算float类型的属性值
- ArgbEvaluator:计算十六进制形式的颜色值
- TypeEvaluator:实现该接口来自定义Evaluator。
介绍完了属性动画的知识,下面请看属性动画使用时的关键代码。
1.使用ValueAnimator
//ValueAnimator的使用
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.setTarget(view);
animator.setDuration(1000).start();
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
//监听数值的变化,进而完成动画的变换
}
});
注:动画的监听有着开始(start)、重复(Repeat)、结束(End)、和取消(Cancel)等几个过程,不过我们一般都只需要End过程:
//fadeAnim是一个ObjectAnimator对象
fadeAnim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
//TODO 动画结束时需要做的处理
}
});
2.使用ObjectAnimator动画
创建一个ObjectAnimator通过它的静态工厂类直接返回一个ObjectAnimator对象。参数包括对象和对象的属性名。要求属性必须有get和set函数。
//令一个button从不透明到透明
ObjectAnimator animator = ObjectAnimator.ofFloat(button,"alpha",1,0);
animator.setDuration(2000);
animator.start();
3.在XML中使用属性动画
在res目录下新建一个animator文件夹,在里面创建属性动画
<objectAnimator
android:duration="2000"
android:propertyName="alpha"
android:valueFrom="1.0"
android:valueTo="0.0">
</objectAnimator>
程序中使用XML定义的动画
Animator anim = AnimatorInflater.loadAnimator(this,R.animator.alpha_property);
anim.setTarget(myObject);
anim.start();