100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android属性动画-ValueAnimator总结

Android属性动画-ValueAnimator总结

时间:2019-02-22 06:05:13

相关推荐

Android属性动画-ValueAnimator总结

Android属性动画 - ValueAnimator总结

最近开发Android App时学习了 ValueAnimator 类的使用,在这做一个归纳总结(PS:这是我的第一篇博客,不足、不正确之处请见谅~)

ValueAnimator类用于完成属性动画的计时、值的计算,但它不会对要添加动画的对象和属性应用这些值。因此必须监听由ValueAnimator计算的值的更新情况,并使用您自己的逻辑修改要添加动画的对象。

使用:

ValueAnimator可以对int、float、颜色以及自定义类型的数值添加动画

ValueAnimator的工厂方法ofFloat()ofInt()ofObject()等创建对象,方法的参数指定动画的路径,例如ofFloat(0f, 100f, 50f)就是指定动画的值从 0f 开始,经过 100f ,最后到 50f 结束;当然也可以通过new ValueAnimator()创建对象,再用setFloatValues()指定动画路径(ofFloat()源码就是这么干的)

setDuration()指定动画时长;若动画运行中setDuration()动画会继续运行且剩余运行时长 = 新时长 - 已运行时长,如果已运行时长大于新时长则动画进度直接跳到100%结束

start()启动动画;若动画正在运行或已经结束,再调用start()可以从头重新开始运行动画

setStartDelay()指定动画在调用start()之后延迟多长时间再开始运行

setCurrentFraction()修改动画进度;动画运行前setCurrentFraction()会使动画一start()就马上从指定进度开始运行,忽略设置的startDelay;动画运行中setCurrentFraction()会使动画从指定进度继续运行

setCurrentPlayTime()效果与setCurrentFraction()差不多,只不过前者是基于动画总时长计算并设置新进度(源码里setCurrentPlayTime()就是去调用setCurrentFraction()实现的);同样,动画运行前setCurrentPlayTime()会使动画一start()就马上从指定播放时间开始运行,忽略设置的startDelay;动画运行中setCurrentPlayTime()会使动画从指定播放时间继续运行

setInterpolator()设置动画的插值器,默认是AccelerateDecelerateInterpolator(开始慢,中间快,结束慢),还有LinearInterpolator(匀速)、AccelerateInterpolator(开始慢,逐渐加速)、DecelerateInterpolator(开始快,逐渐减速)等等,还可实现TimeInterpolator接口来自定义插值器

setEvaluator()设置动画的Evaluator(可译为估值器),用于告知属性动画系统如何计算指定属性的值,有IntEvaluatorFloatEvaluatorArgbEvaluator(用于计算颜色属性的值),或实现TypeEvaluator实现自定义Evaluator

setFloatValues()等方法修改动画路径;动画运行中setFloatValues()不会打断动画,而是保持动画进度不变,从新路径中原动画进度的位置继续运行

setRepeatCount()指定动画重复次数,默认0(不重复),还可以指定INFINITE(无限次重复)

setRepeatMode()指定动画重复方式,默认RESTART(从头播放)、REVERSE(反向播放)

addListener()监听onAnimationStart()onAnimationEnd()onAnimationCancel()onAnimationRepeat()回调

addUpdateListener()监听onAnimationUpdate()回调,这个最常用,用来监听ValueAnimator当前计算出的值并应用到要添加动画的对象上,示例:

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator animation) {float animatedValue = (float) animation.getAnimatedValue();textView.setTranslationX(animatedValue);}});

addPauseListener()监听onAnimationPause()onAnimationResume()回调

pause()暂停动画;resume()恢复动画

cancel()使动画在当前进度结束,并会收到onAnimationCancel()onAnimationEnd()回调;end()使动画直接跳至动画路径的终点结束(能收到终点处的onAnimationUpdate()回调),并会收到onAnimationEnd()回调

isStarted返回动画是否已经start(),startDelay期间为true;isRunning()返回动画是否正在运行,startDelay期间为false

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。