ValueAnimator的addUpdateListener重复输出相同数值问题求助
ValueAnimator重复输出相同数值的解决方案
问题原因
ValueAnimator的addUpdateListener会在动画的每一渲染帧触发回调,动画的插值计算是基于时间的连续变化。当你把animatedValue强制转为Int时,相邻几帧的插值结果可能落在同一个整数区间,自然会重复输出相同的整数数值。
解决方法
添加一个变量记录上一次输出的数值,仅当当前数值与上一次不同时才打印日志,代码修改如下:
ValueAnimator .ofInt(0, 100) .setDuration(Duration.ofSeconds(5).toMillis()) .apply { var lastProgress = -1 // 初始化一个和起始值不同的默认值 doOnStart {} addUpdateListener { val progress = it.animatedValue as Int if (progress != lastProgress) { Log.d("tag", "$progress") lastProgress = progress } } doOnEnd {} }.start()
补充说明
如果希望动画的数值变化更贴合"逐次+1"的节奏,也可以调整ValueAnimator的插值器,但上述方法是最直接解决日志重复问题的方案,不会改变动画本身的流畅性。
内容的提问来源于stack exchange,提问作者Arman
相关产品推荐
相关产品推荐

