如何设置安卓评级栏笔画的颜色?(不是星星的颜色,而是边框的颜色)

2022-09-01 09:56:23

我是一个机器人初学者,我想做我的自定义评级栏。

免责声明:它不是重复的。因为我读过的所有帖子都询问如何更改星星的颜色以及如何删除笔画。这不是我想要的。我希望有笔触,并能够改变边框的颜色。

具有透明和黄色笔触,空,黄色背景和笔触为一半和填充。

我不想使用 pngs。我已经有我自己的,但它们太小了。我只是不想要求设计师制作新的星星,如果我只能使用XML属性和可绘制对象来制作星星。

<RatingBar
          android:id="@+id/thread_rating"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:isIndicator="true"
          android:numStars="5"
          android:progressBackgroundTint="@color/gray"
          android:progressTint="@color/gold"
          android:rating="2.5"
          android:secondaryProgressTint="@color/gray"
          android:stepSize="0.5"
          style="?android:attr/ratingBarStyleSmall"
          />

我和另一位工程师一起研究这个问题。他还在java文件中编写了代码。

private void setRatingBarStart(RatingBar rating_bar) {
LayerDrawable stars = (LayerDrawable) rating_bar.getProgressDrawable();
stars.getDrawable(2)
    .setColorFilter(getResources().getColor(R.color.gold),
        PorterDuff.Mode.SRC_ATOP); // for filled stars
stars.getDrawable(1)
    .setColorFilter(getResources().getColor(R.color.light_gray),
        PorterDuff.Mode.SRC_ATOP); // for half filled stars
stars.getDrawable(0)
    .setColorFilter(getResources().getColor(R.color.light_gray),
        PorterDuff.Mode.SRC_ATOP); // for empty stars

[所以现在它有灰色背景,黄色表示填充,现在没有笔画。

enter image description here

我希望它有透明的背景,黄色笔触和黄色填充。看起来像这样enter image description here

我已经知道如何将背景设置为透明并使其变为黄色。我只是不知道如何设置笔触颜色。多谢!!!!


答案 1

将所有可绘制的颜色设置为黄色(在你的例子中为getResources().getColor(R.color.gold)作为设置的笔触和背景。(背景,次要进度和进度)

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
        LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
        stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(0).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(1).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 

从不需要它中删除 ,, 属性。progressBackgroundTintprogressTintsecondaryProgressTintRatingBar

<RatingBar
        android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="5"
        android:rating="2.5"/>

结果是 ::

image1

希望这会有所帮助(粉红色只是背景色)

将可绘制对象 1 和 0 设置为红色后:

RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
        LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
        stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(0).setColorFilter(Color.Red, PorterDuff.Mode.SRC_ATOP);
        stars.getDrawable(1).setColorFilter(Color.Red, PorterDuff.Mode.SRC_ATOP);

image2


答案 2

不要为此使用任何库或样式。使用波纹管步骤,你得到结果。

在可绘制文件夹中创建一个文件作为custom_ratingbar.xml

    <?xml version="1.0" encoding="utf-8"?>
 <layer-list 
 xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@android:id/background"
android:drawable="@drawable/star_empty" />
 <item android:id="@android:id/secondaryProgress"
android:drawable="@drawable/star_empty" />
 <item android:id="@android:id/progress"
android:drawable="@drawable/star_full" />
</layer-list>

然后在您的评级栏中使用以下内容:

  <RatingBar
    android:id="@+id/ratingBarChef"
    style="?android:attr/ratingBarStyleSmall"
    android:numStars="5"
    android:stepSize="0.2"
    android:rating="3.0"
    android:progressDrawable="@drawable/custom_ratingbar"
    android:isIndicator="false"
    />

推荐