Мин. SDK моего приложения - 21, поэтому добавлять его не нужно
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
к классу приложения, так как его значение меньше 21 (в любом случае я пытался добавить его безрезультатно).
Мой файл конфигурации build.gradle имеет
defaultConfig {vectorDrawables.useSupportLibrary = true}
настройка и не включены proguard / minify
debuggable true
crunchPngs false
minifyEnabled false
shrinkResources false
splits.abi.enable false
splits.density.enable false
В любом случае я проверил скомпилированный файл .apk с помощью AndroidStudio и убедился, что все мои векторные рисунки действительно присутствуют в папке res / drawable, поэтому это не proguard / shrinker или что-то подобное.
Также я должен отметить, что я использую androidx
вместо support
в этом проекте.
Итак, я перепробовал все возможные варианты настройки изображения:
setImageResource(imgResId);
setImageDrawable(ContextCompat.getDrawable(context, imgResId));
setImageDrawable(AppCompatResources.getDrawable(context, imgResId));
setImageDrawable(VectorDrawableCompat.createFromResource(resources, imgResId));
setImageDrawable(VectorDrawableCompat.create(resources, imgResId, null));
setImageDrawable(ResourcesCompat.getDrawable(resources, imgResId, null));
безрезультатно (фактически результатом всегда был сбой приложения). Отправка реального Theme
вместо null
тоже не помогла.
Это обычный PagerAdapter
, и для векторных динамически выводимых изображений устанавливаются соответствующие ImageView
на каждой странице динамически, так что это не тот случай статического xml android:src="@drawable\ic_img"
, когда вы должны (но не должны) заменить его на app:srcCompat="@drawable\ic_img"
.
И я также попытался обернуть изображение в селектор, как:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/vector_image" />
</selector>
но не повезло - отчет о сбое немного меняется, но, в конце концов, приводит к тому же исключению.
Ничто не помогло мне из этого SO вопроса и любых других SO вопросов, которые я также нашел.
Мои векторные объекты используют градиент, который работает только начиная с API 24. Я тестирую свое приложение на устройстве API 26, но попытался заменить все градиенты, добавив android:fillColor
в раздел path
и комментируя раздел градиента, например:
<path
android:pathData="M268.177,..."
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000"
android:fillColor="#FFEF5E32">
<!--<aapt:attr name="android:fillColor">-->
<!--<gradient-->
<!--android:startY="84.70677"-->
<!--android:startX="284.02185"-->
<!--android:endY="70.083954"-->
<!--android:endX="252.21419"-->
<!--android:type="linear">-->
<!--<item android:offset="0" android:color="#FFEF5E32"/>-->
<!--<item android:offset="1" android:color="#FFF68F32"/>-->
<!--</gradient>-->
<!--</aapt:attr>-->
</path>
И не повезло ...
Я понимаю, что импорт моих векторов в png / webp, скорее всего, решит проблему, но я хочу использовать векторные рисунки.