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

26 篇文章 0 订阅

属性动画

属性动画是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;
     }
                  
     public int getWidth()
     {
         return target.getLayoutParams().width;
     }
     public void 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/帧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值