2016-10-15 2 views
2

Я пытаюсь настроить каждую звезду RatingBar, чтобы выглядеть по-другому.Настроить RatingBar звезды по-разному

Как я смотрю на его исходный код RatingBar или его супер классов AbsSeekBar/ProgressBar, я не смог определить такой вариант, он может только обеспечить прогресс/secondaryProgress и фон для всего вида. Самое близкое будет использовать thumbDrawable, но его утилита совершенно другая (для неопределенного SeekBar).

Есть ли какой-либо вариант помимо выполнения полностью пользовательского вида для репликации таких функций?

Вот картинка с RatingBar Я пытаюсь создать: custom ratingBar

Я должен отметить, что каждая звезда (последняя выбранная звезда), будет иметь другое «лицо», и там всегда будет точно 5 звезд (numStars). Любые идеи очень ценятся!

ответ

1

Посмотрите на эту библиотеку starBar by badoo, имеющую от одной до десяти звезд с различными цветными изображениями, такими как красный оранжевый желтый зеленый, и можете изменять изображения в ресурсе, чтобы получить ваш выбор бара. Также это link было бы полезно.

+0

Хотя я склонен не использовать пользовательский вид, который создает аналогичная функциональность для RatingBar, но, расширяя класс View, я думаю, что вы заслуживаете щедрости, предлагаемой для этого вопроса, потому что ваш ответ достаточно близко, чтобы воспроизвести то, что я спросил. Я оставлю вопрос открытым еще некоторое время, после чего я отвечу на ваш ответ. – DoruAdryan

1

Вы можете использовать SmileView, что обеспечивает вид рейтинга с различным вводимым коэффициентом для каждого значения рейтинга, а также основываются на badoo's StarBar view

Использования

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 
     ... 

     <com.eugeneek.smilebar.SmileBar 
      android:id="@+id/starBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      app:smileWidth="50dp" 
      app:smileHeight="50dp" 
      app:smileDefault="@drawable/none" 
      app:smileRate1="@drawable/one" 
      app:smileRate2="@drawable/two" 
      app:smileRate3="@drawable/three" 
      app:smileRate4="@drawable/four" 
      app:smileRate5="@drawable/five" 
      app:horizontalSpacing="8dp" 
      app:rating="1" 
      app:enabled="true"/> 

     ... 
    </LinearLayout>