我的使用场景是展示不同等级的颜色。例如:
1- 红色
2- 橙色
3- 黄色
4- 浅绿色
5- 深绿色
解决方案:
ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(final RatingBar ratingBar, final float rating, final boolean fromUser) {
setCurrentRating(rating);
}
});
然后在你的setCurrentRating()
方法中:
private void setCurrentRating(float rating) {
LayerDrawable drawable = (LayerDrawable)rateOverall.getProgressDrawable();
if(mContext!=null) {
switch (Math.round(rating)) {
case 1:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_red));
break;
case 2:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_orange));
break;
case 3:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_yellow));
break;
case 4:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.light_green_review));
break;
case 5:
setRatingStarColor(drawable.getDrawable(2), ContextCompat.getColor(mContext, R.color.dark_green));
break;
}
setRatingStarColor(drawable.getDrawable(1), ContextCompat.getColor(mContext, R.color.transparent));
setRatingStarColor(drawable.getDrawable(0), ContextCompat.getColor(mContext, R.color.light_grey_payment));
}
}
然后在你的setRatingStarColor()
方法中:
private void setRatingStarColor(Drawable drawable, @ColorInt int color)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
DrawableCompat.setTint(drawable, color);
}
else
{
drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
}
}
感谢这篇
回答,它帮助我解决了问题。希望它能帮到其他人!
colorControlActivated
中删除android:
。因为我使用了自动完成代码,所以添加了android:
前缀。没有这个前缀,它也可以在KitKat上工作。 - M.kazem Akhgary