【发布时间】:2019-05-03 09:21:11
【问题描述】:
我的 app min SDK 是 21,所以不需要添加
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
到 Application 类,因为它仅适用于低于 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
无论如何,我使用 AndroidStudio 检查了编译的 .apk 文件,并确保我的所有矢量可绘制对象都确实存在于 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,所以当你应该(但不是必须)用app:srcCompat="@drawable\ic_img"替换它时,这不是静态xmlandroid:src="@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>
但没有运气 - 崩溃报告发生了一些变化,但最终导致相同的异常。
this SO question 以及我发现的任何其他 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 很可能会解决这个问题,但我想使用矢量绘图。
【问题讨论】:
标签: android android-vectordrawable