Android: Custom RatingBar — изображения не подходят

У меня возникла небольшая проблема при настройке пользовательской панели рейтинга в Android. Я следовал этому руководству:

Как создать панель пользовательских рейтингов в Android

Однако у меня возникла проблема при изменении/выборе более 4 звезд. Выбранное изображение звезды немного неуместно. Вот изображение, чтобы показать вам, как это выглядит.

Неуместные звезды

Вот мой XML для создания пользовательской панели рейтинга.

Основной xml, в котором определяется вид панели рейтинга:

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="10dp"
        android:gravity="center" >

        <RatingBar
            android:id="@+id/ratingBar"
            android:layout_width="wrap_content"
            android:layout_height="19dp"
            android:numStars="50"
            android:stepSize="1.0"
            style="@style/AppCustomRatingBar"/>

Пользовательский стиль для RatingBar

<style name="AppCustomRatingBar"
    parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/rating_stars_custom</item>
    <item name="android:minHeight">19dp</item>
    <item name="android:maxHeight">19dp</item>
</style>

rating_stars_custom.xml

<item
    android:id="@android:id/background"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item
    android:id="@android:id/progress"
    android:drawable="@drawable/rating_stars_yellow_full" />

rating_stars_yellow_empty.xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@android:id/background"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item
    android:id="@android:id/progress"
    android:drawable="@drawable/rating_stars_yellow_full" />

rating_stars_yellow_full.xml

<item android:state_pressed="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:state_focused="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:state_selected="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:drawable="@drawable/home_icon_star_fill_selected" />

What am I doing wrong to misplace the stars? The image sizes of the stars (both yellow and white) are the same.


person user5035668    schedule 07.07.2015    source источник


Ответы (2)


Мне удалось это исправить. Если вы посмотрите на изображение, которое я предоставил в своем посте выше, желтые звезды выглядят как 1 пиксель по сравнению с пустыми звездами. Поэтому я посмотрел на свои фотографии, которые я использую, и их размеры. После этого оказалось, что желтая звезда на 1 пикс короче (по ширине) по сравнению с изображением с пустой звездой. Так что это была моя проблема. Я получил новые фотографии звезд и убедился, что они одинакового размера. Теперь у меня 2 картинки 30х30 и все ОК! Это исправило мою проблему! Поэтому мой совет людям, которые сталкиваются с одной и той же проблемой, — внимательно посмотреть на размер изображений, которые они используют (пустые/полные), и убедиться, что они одинакового размера. Таким образом, вы экономите время и ненужное кодирование. ГЛ&ХФ :)

person user5035668    schedule 09.07.2015

Ну, у меня была такая же проблема с панелью рейтинга. после некоторых исследований я нашел способ решить вышеуказанную проблему.

  • во-первых, вам нужно 2 звезды, одна пустая звезда и одна цветная звезда. и размер должен быть одинаковым. (в моем случае оба 25x25)

затем поместите этот код в стили xml

 <style name="redbar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/ratingbar_red</item>
    <item name="android:minHeight">25dip</item>
    <item name="android:maxHeight">25dip</item>
</style>

создайте еще один XML-файл с именем ratingbar_red.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" />    
</layer-list>

Наконец, создайте RatingBar вот так.

 <RatingBar
                                android:id="@+id/RatingBar05"
                                style="@style/redbar"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:isIndicator="false"
                                android:numStars="5"/>
person Ramesh Jaya    schedule 09.07.2015