РейтингBar получает полупрозрачный

Я использую RecyclerView с RatingBar в каждой строке. Теперь иногда часть RatingBar отображается неправильно. После выхода из экрана и возвращения обратно все нормально. Я понятия не имею, почему это происходит, я даже удалял любые стили из RatingBar, поэтому он должен иметь внешний вид по умолчанию.

Вот как это выглядит:

введите описание изображения здесь

Протестировано на Nexus 6P (Android 7.1.1). Также тестируется на Samsung Galaxy J3 (2016) (Android 5.1.1), и здесь проблем нет.

Я также добавил

holder.rbRating.requestLayout();

в onBindViewHolder(). Это немного уменьшает проблему, но она все еще присутствует. Когда я просматриваю "плохую" строку на экране при повторном использовании, она выглядит нормально.

Здесь макет строки:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:paddingTop="@dimen/main_margin_top"
    android:paddingBottom="@dimen/main_margin_top"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/tvRatingTitle"
        android:text="Czystość wody"
        android:textSize="16sp"
        android:textStyle="bold"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RatingBar
        android:id="@+id/rbRating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:isIndicator="true"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/tvRatingTitle"
        android:numStars="5"
        android:rating="2.5"
        android:stepSize="0.1" />

    <CheckBox
        android:id="@+id/chkMissing"
        android:text="Zaznacz jeśli nie ma"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/rbRating"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

Я также пытался переключиться на android.support.v7.widget.AppCompatRatingBar, но это не имеет никакого значения.

EDIT:

Решение @Muhib Pirani похоже работает, но у меня есть две небольшие проблемы:

1) на Nexus 6P первый слой звезды смещается на несколько пикселей (приближение):

введите описание изображения здесь

2) В Samsung Galaxy J3 (2016) это выглядит так:

введите описание изображения здесь

Мне хорошо с границами, но я бы хотел, чтобы они были зелеными (не серыми, фон должен быть серым) в пустых звездах.

Ответ 1

Я также столкнулся с той же проблемой. Мне пришлось программно устанавливать цвета в RatingBar, как это, и он работал:

LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable();
layerDrawable.getDrawable(2).setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP);
layerDrawable.getDrawable(1).setColorFilter(ContextCompat.getColor(context, R.color.colorPrimaryDark), PorterDuff.Mode.SRC_ATOP);
layerDrawable.getDrawable(0).setColorFilter(ContextCompat.getColor(context, R.color.editTextBor), PorterDuff.Mode.SRC_ATOP);//when not selected color.

Держите layerDrawable.getDrawable(2) и layerDrawable.getDrawable(1) того же цвета.

Ответ 2

У меня также были проблемы с родным RatingBar, поэтому я решил использовать MaterialRatingBar. Он решил все мои проблемы.

Надеюсь, что это поможет