Android 属性动画跟插值器估值器

属性动画

属性动画是android API11之后加入的。其创建过程同样分为代码动态创建跟xml静态创建。

主要有三类:ValueAnimator,ObjectAnimator,AnimatorSet。以动态创建为例,xml中创建跟tween动画类似。(唯一区别是使用AnimatorInflater.loadAnimator()来加载动画,用setTarget(object)来将动画放到对象上)(在实际开发中建议使用代码来动态创建属性动画)

ObjectAnimator

ObjectAnimator.ofFloat(objAnimator,"translationX", objAnimator.getWidth()/3).start();

ValueAnimator

ValueAnimator         colorAnimator=ObjectAnimator.ofInt(valueAnimator,"backgroundColor",0xffff8080,0xff8080ff);

colorAnimator.setDuration(2500);

colorAnimator.setEvaluator(newArgbEvaluator());

colorAnimator.setRepeatCount(ValueAnimator.INFINITE);//动画重复次数

colorAnimator.setRepeatMode(ValueAnimator.REVERSE);

colorAnimator.start();

 

当然也可以添加对应的属性变化监听:

colorAnimator.addUpdateListener(newAnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimatoranimation) {

            int current=(Integer)animation.getAnimatedValue();

         }

});

其中current获得的就是动画当前的属性值,可以根据当前属性值对v对象进行相关改变。

AnimatorSet

AnimatorSet set =new AnimatorSet();

set.playTogether(

                   ObjectAnimator.ofFloat(animatorSet,"scaleX", 1,1.5f),

                   ObjectAnimator.ofFloat(animatorSet,"scaleY", 1,1.5f),

                   ObjectAnimator.ofFloat(animatorSet,"alpha", 1,0.25f,1)

                   );

set.setDuration(4000).start();

 

注意,在使用属性动画改编对象的属性时,对象必须提供对应属性的set,get方法。

例如,当要更改button的宽度时一般是这么做:

ObjectAnimator.ofInt(btn,"width", 300).setDuration(4000).start();

只不过上面这段代码不起作用,因为button继承自textview,而textview的setWidth方法不是设置view的宽度。所以上面属性动画无效。

可以更改为如下:

Static  class TargetView{

         View target;

         TargetView(Viewview)

         {

                   target=view;

         }

                  

         publicint getWidth()

         {

                   returntarget.getLayoutParams().width;

         }

         publicvoid setWidth(int width)

         {

                   target.getLayoutParams().width=width;

                   target.requestLayout();

         }

}

 

TargetView targetView =new TargetView(btn);

ObjectAnimator.ofInt(targetView,"width", 300).setDuration(4000).start();

view动画中的插值器跟估值器

TimeInterpolator时间插值器,linearInterpolator(线性插值器,匀速动画),AccelerateDecelerateInterpolator(加速减速插值器,两头慢中间快),DeceleraterInterpolator(减速插值器)

TypeEvaluator类型估值算法(估值器)有IntEvaluator,FloatEvaluator,ArgbEvaluator。其中动画的默认刷新率为10ms/帧。

你可能感兴趣的:(android,动画,对象,animation,估值)