星级评分条(Rating Bar)动画无法停在指定星级的问题求助
解决星级评分动画无法停在指定星级的问题
看起来你遇到的核心问题是动画的目标值设置错了——原代码里你把动画的终点固定设为了5f,所以不管你在switch里给stars设置了多少星级,动画启动后都会从你设置的初始值继续往5星跑,最后自然会填满所有星级。
修复思路
我们需要根据sc的计算结果,动态设置动画的目标星级,而不是固定让动画跑到5星。这样动画结束后就会停在你期望的1/2/3星位置。
修改后的代码
int sc = total % 10; float targetRating; // 根据sc值确定最终要停的星级 switch(sc){ case 5: case 6: targetRating = 1f; break; case 7: case 8: targetRating = 2f; break; case 9: case 0: targetRating = 3f; break; default: targetRating = stars.getRating(); // 默认保持当前星级,避免异常情况 } // 创建从当前星级过渡到目标星级的动画 ObjectAnimator anim = ObjectAnimator.ofFloat(stars, "rating", stars.getRating(), targetRating); anim.setDuration(2000); anim.start();
为什么原代码不生效?
原代码的逻辑是:先手动设置stars的星级,然后启动一个从“当前星级(你刚设置的1/2/3)”到5f的动画。动画一旦启动,会持续更新stars的rating属性,所以你手动设置的星级会被动画覆盖,最终跑到5星的位置。
额外小优化
如果希望动画是从0开始过渡到目标星级,可以把动画的起始值改成0f:
ObjectAnimator anim = ObjectAnimator.ofFloat(stars, "rating", 0f, targetRating);
内容的提问来源于stack exchange,提问作者Muhammad Adil
相关产品推荐
相关产品推荐

