专题介绍:专题准备

专题一:Android动画专题之逐帧动画

专题二:Android动画专题之补间动画


终于写到了最后的主角,前面的动画虽然也有效果,但是都有着自己的局限性。而今天就是强大的主角到来了!!!


正文开始

还是先来看看官网是如何介绍的(官网点击此处)

android view 的属性动画 android属性动画不流畅_属性动画

很长的一段介绍,但我们需要记住这个特征就好——可以对任何对象执行属性动画,可以定义任何属性的变化

下面还介绍了我们在使用属性动画时应该定义的特性:

  • Duration:这个应该很熟悉了,就是之前tweened animation中用到的动画持续时间。默认值是300ms。
  • interpolation:这个词有的翻译成了加速器,又得说叫插值,我是直接记单词了,跟在使用tweened animation一样。
  • 重复次数和行为:可以用来定义动画结束后是否重复(重复几次)和结束后的行为(从结束的那一帧开始倒着播放到第一帧还是怎样)
  • 动画集合:使用一组属性动画,可以顺序播放,同时播放。
  • 帧刷新频率:定义动画的帧多久刷新一次,默认是10ms。

 

介绍属性动画不可避免的要介绍下Animator这个框架,它就是3.0后推出的新的动画框架。可以简单的看下这个官网的介绍:

android view 的属性动画 android属性动画不流畅_属性值_02

android view 的属性动画 android属性动画不流畅_lua_03

相关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过程:

android view 的属性动画 android属性动画不流畅_lua_04


//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();