VectorDrawable在API 23上无法正确呈现

时间:2016-07-04 12:35:08

标签: android android-vectordrawable

我尽可能用VectorDrawables替换所有图标。但是我注意到它们中的一些在API 23上无法正确渲染,颜色似乎正在流失。其中一个渲染很好。这是我创建的isolated project的屏幕截图:

enter image description here

在API 21上看起来非常好:

enter image description here

The source code of sample app is here

我在ImageView上使用AppCompat 24.0.0,app:srcCompat并设置了vectorDrawables.useSupportLibrary = true。我还尝试使用目标23的AppCompat 23.4.0。但是,如果我删除appCompat并将minSdkVersion设置为21并使用本机向量支持,则结果不会更改。 IDE不会抱怨任何不受支持的内容。我如何找出问题所在?这是一个平台错误吗?有没有解决方法?

2 个答案:

答案 0 :(得分:27)

我在API 23上只有完全相同的问题。我是动态设置我的ImageView源,而不是在xml中。我意识到问题在于我在做什么:

Drawable show = getContext().getResources().getDrawable(resourceId);

当我应该做的时候:

Drawable show = AppCompatResources.getDrawable(getContext(), resourceId);

我希望这有助于某人!

答案 1 :(得分:18)

首先,我不是Android开发人员,我是设计师,协助Android Studio中的某些生产资产。

我们开始遇到一些问题,我们的一些矢量绘图从22个移动到24个。

(我更新了我的项目以使用Nexus 6 API 23并编译版本24,构建版本24,目标SDK 24.然后我的drawables似乎是关闭路径并添加类似于上面发生的填充。)< / em>的

<强>试过

我可以访问Adobe Illustrator CC(19.2.1),并且一直在探索具有笔划的对象上的各种路径选项。从扩展路径到填充,组合路径,制作复合路径,关闭路径等等一切都没有运气。

转换器选项

在线SVG到可绘制转换器(http://inloop.github.io/svg2android/)有一个选项,&#34; Bake转换为路径(实验),&#34;我选择了它,虽然它改进了渲染,但它仍然不完美。

潜在解决方案

然后我再次进入Illustrator并尝试了#34; 另存为&#34; SVG vs.&#34; Export &#34;作为SVG。我不确定Adobe Illustrator在这两个设置之间的差异,但它们确实吐出了略有不同的SVG XML数据。

然后我接受了新的&#34;另存为SVG&#34;并将其放入此在线Drawable转换器:http://inloop.github.io/svg2android/

检查了这些选项:

  • 删除没有属性的空组
  • Bake转换为路径 (实验)

它返回的新Drawable XML似乎正常工作和渲染。

我不确定这是否适用于具有笔画,形状和填充的其他矢量图形,但我想我会分享我的经验。这不是一个真正的解决方案,因为它似乎是新Android SDK中的一个错误,并且之前已经支持过它,但它可能是某些人可能的临时工作。