Я установил цвет ratingBar на другой цвет для Android по умолчанию - синий и серый - я выбрал свои звезды с черным фоном и розовыми, если они выбраны.
Это мой код для моей mainactivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingbar);
LayerDrawable layerDrawable2 = (LayerDrawable) ratingBar.getProgressDrawable();
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(0)),
ContextCompat.getColor(getApplicationContext(), android.R.color.background_dark));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(1)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent)); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(2)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent));
ratingBar.setIsIndicator(false);
ratingBar.setRating(3.6f);
ratingBar.setStepSize(0.1f);
ratingBar.invalidate();
ratingBar.setIsIndicator(true);
}
}
Вы можете видеть, что если я ставлю рейтинг 3,6, он выбирает до 4.
Однако, если я прокомментирую свои собственные настроенные цвета, ratingBar правильно настроит отображение только части 4-й звезды, заполненной, так как переданное ей значение равно 3.6:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingbar);
/* LayerDrawable layerDrawable2 = (LayerDrawable) ratingBar.getProgressDrawable();
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(0)),
ContextCompat.getColor(getApplicationContext(), android.R.color.background_dark));
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(1)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent)); // Partial star
DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable2.getDrawable(2)),
ContextCompat.getColor(getApplicationContext(), R.color.colorAccent));*/
ratingBar.setIsIndicator(false);
ratingBar.setRating(3.6f);
ratingBar.setStepSize(0.1f);
ratingBar.invalidate();
ratingBar.setIsIndicator(true);
}
}
Почему это, если я создаю свои собственные пользовательские цвета, ratingBar не заполняется должным образом?
Я создал небольшое репо, и вы можете скачать его и протестировать здесь: https://github.com/Winghin2517/RatingBarTest2
EDIT:
Библиотека FlyingPumba демонстрирует некоторые надежды на то, что я хочу достичь, но мне нужен стиль, когда фон звезд белый, когда он появляется на экране, и он будет заполнен сплошным цветом, когда пользователи нажимают на звезду. В моем случае я хочу, чтобы он был заполнен зеленым цветом.
Ниже я достиг того, чего я смог достичь, но он еще не совсем там. Я изменил фон scrollview, в котором звезды сидят на розовом, так что вы можете видеть, что вместо белого фона для звезд светит розовый фон прокрутки. Для моего варианта использования я хочу, чтобы белые звезды сидели перед изображением, и я не хочу, чтобы изображение в изображении отображалось в звездах.
Также мне не нужен белый штрих для звезд вообще, поскольку я хочу, чтобы стиль стилей был простым.
<com.iarcuschin.simpleratingbar.SimpleRatingBar
android:id="@+id/ratingBar3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
app:srb_rating="3.6"
app:srb_fillColor="@color/material_greenA700"
app:srb_borderColor="@color/material_white"
app:srb_starBorderWidth="0"
app:srb_pressedFillColor="@color/material_greenA700"
app:srb_starSize="30dp"
/>