Android 属性动画ValueAnimator与插值器详解

Android 属性动画ValueAnimator与插值器详解,第1张

概述Android属性动画ValueAnimator与插值器详解一、ValueAnimator详解:ValueAnimator是整个动画的核心,ObjectAnimator即是继承自ValueAnimator来实现。

AndroID 属性动画ValueAnimator与插值器详解

一、ValueAnimator详解:

ValueAnimator是整个动画的核心,ObjectAnimator即是继承自ValueAnimator来实现。
ValueAnimator更像是一个数值发生器,用来产生具有一定规律的数字,从而让调动者来控制动画的实现过程。

1、ValueAnimator的使用:

ValueAnimator valueAnimator = ValueAnimator.offloat(0,100); valueAnimator.setDuration(1000).start();  //可以设置插值器来设置动画的类型,比如是“加速”,"减速",还是"先加速后减速"等,下面为使用系统的减速插值器 //参考网址:http://blog.sina.com.cn/s/blog_6e519585010157zt.HTML valueAnimator.setInterpolator(new DecelerateInterpolator());  final int baseWIDth = animatorBt.getWIDth(); //valueAnimator会在1000毫秒内产生0到100的数值,而我们可以在回调中通过animation.getAnimatedValue()得到此数值,然后进行自定义动画设置 valueAnimator.addUpdate@R_502_6818@ener(new ValueAnimator.AnimatorUpdate@R_502_6818@ener() {  @OverrIDe  public voID onAnimationUpdate(ValueAnimator animation) {   float value = (float) animation.getAnimatedValue();    LogUtils.showLog("value为"+value);    //使用这个value   //1.改变距离   animatorBt.setTranslationX(value * 5);   //2.改变透明度   animatorBt.setAlpha(1 - (value) / 200);   //3.增加button的宽度,这个是在ObjectAnimator中无法直接设置的   VIEwGroup.LayoutParams params = animatorBt.getLayoutParams();   params.wIDth = (int) (baseWIDth + value);    LogUtils.showLog("宽度为"+params.wIDth);    //当这个vIEw的布局属性改变了之后要调用这个方法   animatorBt.requestLayout();   }  });  }  },1000); 

2、停止ValueAnimator动画:

  可以调用ValueAnimator对象的cancel()方法或者end()方法。 首先调用上述两种方法都会停止动画,不过区别就在于

        1、调用cancel()后,ValueAnimator会立即停止,不会再回调了。
        2、调用end()后,ValueAnimator会直接回调此动画结束状态的那个值,即,如果调用了end(),动画会直接停止到最后。

二、AndroID插值器Interpolator的使用:

  插值器可以实现动画实现衰减效果,比如"逐渐减小",“逐渐增大”,“先加速后减速”

  下面是几种常用的插值器:

   1、AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
   2、DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程。
   3、CycleInterpolator:动画从开始到结束,变化率是循环给定次数的正弦曲线。
   4、AccelerateDecelerateInterpolator:动画从开始到结束,变化率是先加速后减速的过程。
   5、linearInterpolator:动画从开始到结束,变化率是线性变化。

1、使用方法为:

//设置一个减速的插值器  valueAnimator.setInterpolator(new DecelerateInterpolator()); 

  ValueAnimator的原理可以去看看其源码:

voID animateValue(float fraction) {   //fraction即为线性的从0-1.0的大小,即假如从200-500,200ms完成,在200ms内,fraction是从0-1.0f来变化更新的,跟具体的要变化的数字没有关系,也可以理解为,fraction为坐标轴上的x值   //下面即为将x值传给自己的插值器   fraction = mInterpolator.getInterpolation(fraction);   mCurrentFraction = fraction;   int numValues = mValues.length;   for (int i = 0; i < numValues; ++i) {    mValues[i].calculateValue(fraction);   }   //此为将最后的数据回调回去   if (mUpdate@R_502_6818@eners != null) {    int num@R_502_6818@eners = mUpdate@R_502_6818@eners.size();    for (int i = 0; i < num@R_502_6818@eners; ++i) {     mUpdate@R_502_6818@eners.get(i).onAnimationUpdate(this);    }   }  } 

2、自定义插值器:

//所以,要使用自定义的插值器的话,需要继承BaseInterpolator抽象类,然后实现里面的抽象方法: float getInterpolation(float input );//input是传入的从0-1.0f的x值,而我们就是返回0-1.0f的y值。 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持! 

总结

以上是内存溢出为你收集整理的Android 属性动画ValueAnimator与插值器详解全部内容,希望文章能够帮你解决Android 属性动画ValueAnimator与插值器详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存