Значок вектора Android RatingBar не отображается

У меня есть layout, где я хочу показать RatingBar пользователю. Я использую свои собственные значки вместо звездочек по умолчанию. Моя проблема в том, что значки в векторном формате, и когда я их использую, я получаю странные эффекты (см. Изображение ниже). Он должен отображать 5 значков, но показывает только один, почему?

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

Когда я конвертирую свои векторные изображения в .png, все в порядке.

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

Я добавлю сюда свой код код моих иконок (в папке drawable) //empty_rate.xml:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="48"
    android:viewportHeight="48"
    android:width="8dp"
    android:height="8dp">
    <group
        android:translateX="117"
        android:translateY="-118.5">
        <path
            android:pathData="M-93 122.5c-11 0 -20 9 -20 20 0 11 9 20 20 20 11 0 20 -9 20 -20 0 -11.1 -9 -20 -20 -20zm0 36c-8.8 0 -16 -7.2 -16 -16 0 -8.8 7.2 -16 16 -16 8.8 0 16 7.2 16 16 0 8.8 -7.2 16 -16 16z"
            android:fillColor="#076127" />
    </group>
</vector>

//middle_rate.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="48"
    android:viewportHeight="48"
    android:width="4dp"
    android:height="4dp">
    <group
        android:translateX="117"
        android:translateY="-118.5">
        <path
            android:pathData="M-93 122.5c-11 0 -20 9 -20 20 0 11 9 20 20 20 11 0 20 -9 20 -20 0 -11.1 -9 -20 -20 -20zm0 36c-8.8 0 -16 -7.2 -16 -16 0 -8.8 7.2 -16 16 -16 8.8 0 16 7.2 16 16 0 8.8 -7.2 16 -16 16z"
            android:fillColor="#076127" />
        <path
            android:pathData="M-105.2 142.5c0 -6.7 5.4 -12.2 12.2 -12.2l0 24.3c-6.7 0 -12.2 -5.4 -12.2 -12.1z"
            android:fillColor="#076127" />
    </group>
</vector>

//full_rate.xml
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="48"
    android:viewportHeight="48"
    android:width="8dp"
    android:height="8dp">
    <group
        android:translateX="117"
        android:translateY="-118.5">
        <path
            android:pathData="M-93 122.5c-11 0 -20 9 -20 20 0 11 9 20 20 20 11 0 20 -9 20 -20 0 -11.1 -9 -20 -20 -20zm0 36c-8.8 0 -16 -7.2 -16 -16 0 -8.8 7.2 -16 16 -16 8.8 0 16 7.2 16 16 0 8.8 -7.2 16 -16 16z"
            android:fillColor="#076127" />
        <path
            android:pathData="M-80.8 142.5a12.2 12.2 0 0 1 -12.2 12.2 12.2 12.2 0 0 1 -12.2 -12.2 12.2 12.2 0 0 1 12.2 -12.2 12.2 12.2 0 0 1 12.2 12.2z"
            android:fillColor="#076127" />
    </group>
</vector>

вот мой layout для RatingBar

<RatingBar
                android:isIndicator="true"
                style="@style/CustomRatingBar"
                android:layout_gravity="right"
                android:id="@+id/rate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:numStars="5"/>

Вот мой styles.xml:

<style name="CustomRatingBar" parent="@android:style/Widget.RatingBar">
        <item name="android:progressDrawable">@drawable/custom_ratingbar_selector</item>
        <item name="android:minHeight">24dip</item>
        <item name="android:maxHeight">24dip</item>
    </style>

а вот мой custom_ratingbar_selector.xml в (папке drawable)

<?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/empty_rate" />
    <item android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/middle_rate" />
    <item android:id="@android:id/progress"
        android:drawable="@drawable/full_rate" />
</layer-list>

Так что же не так? Как решить проблему?


person David    schedule 08.06.2016    source источник
comment
Проверьте этот пост: http://stackoverflow.com/questions/34001823/ratingbar-custom-vector-drawables-superimposing   -  person kazhiu    schedule 08.06.2016
comment
@ Дэвид, тебе еще не повезло? я сейчас сталкиваюсь с такой же ситуацией.   -  person Sagar Chavada    schedule 21.09.2017
comment
@David Ты решил это?   -  person Joan P.    schedule 27.03.2019


Ответы (1)


Решение обратной совместимости векторных рисунков

Для поддержки векторного рисования и анимированного векторного рисования на устройствах с версиями платформы ниже Android 5.0 (уровень API 21) VectorDrawableCompat и AnimatedVectorDrawableCompat доступны через две библиотеки поддержки: support-vector-drawable и animated-vector-drawable соответственно.

В Android Studio 1.4 введена ограниченная совместимость поддержка векторных рисунков путем создания файлов PNG во время сборки. Однако библиотеки поддержки векторного рисования и анимированного векторного рисования обеспечивают гибкость и широкую совместимость — это библиотека поддержки, поэтому вы можете использовать ее со всеми версиями платформы Android вплоть до Android 2.1 (уровень API 7+). Чтобы настроить приложение для использования библиотек поддержки векторов, добавьте элемент vectorDrawables в файл build.gradle в модуле приложения.

Используйте следующий фрагмент кода для настройки элемента vectorDrawables:

Для плагина Gradle 2.0+:

android {
   defaultConfig {
     vectorDrawables.useSupportLibrary = true
    }
 }

Для плагина Gradle 1.5 или ниже:

android {
  defaultConfig {
    // Stops the Gradle plugin’s automatic rasterization of vectors
    generatedDensities = []
  }
  // Flag notifies aapt to keep the attribute IDs around
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

ОБНОВЛЕНИЕ

Я думаю, вы не используете более низкий уровень API, чем 21 (потому что он уже исправлен), но если кто-то все еще сталкивается с этим решением, потому что ему нужен более низкий API, пожалуйста. Это правильное техническое решение, даже если вопрос устарел. Ваше здоровье!

person DEX7RA    schedule 11.04.2021