2016-07-04 73 views
13

我正在尽可能用VectorDrawable替换所有图标。但是我注意到它们中的一些在API 23上不能正确显示,并且颜色似乎正在流失。这3个渲染中的一个很好。下面是从isolated project截图我创建:VectorDrawable无法在API 23上正确渲染

enter image description here

看起来API 21完美的罚款:

enter image description here

The source code of sample app is here

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

+0

bro ..尝试降级你的版本一点点到23.0.3,我也使用vectorDrawable .. nd它的工作正常23。 –

+0

看起来像一个appcompat版本问题,因为它保持不变,即使后我删除了appcompat。 – gitter

+0

你使用什么设备(api 23)?你在模拟器上测试过吗?与api级别23矢量绘制使用矢量绘制的系统默认实现,我会说最有可能是ROM问题 – Stepango

回答

15

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

我们开始从22遇到一些我们的矢量绘图资源相同的问题移动高达24

(我更新我的项目才能使用Nexus 6 API 23和编译版24版订做24,目标SDK 24.然后我绘项目似乎是关闭路径,并添加填充类似于上面发生的事情。)

试图

我访问Adobe Illustrator的CC(19.2.1),并一直在探索各种路径操作一个中风的对象上的tions。从扩展路径到填充,组合路径,制作复合路径,关闭路径等都没有运气。

转换器选项

在线SVG到绘制对象转换器(http://inloop.github.io/svg2android/)有一个选项,“烘烤转变成路径(实验),”和我选择的,虽然它改善了渲染,这是还不完美。

潜在的解决方案

然后,我走进Illustrator中再次,并试图 “另存为” SVG与 “出口” 为SVG。我不确定Adobe Illustrator在两种设置之间的差异,但它们确实吐出了稍微不同的SVG XML数据。

我取了新的“另存为SVG”,并把它放进这个在线绘制对象转换器:http://inloop.github.io/svg2android/

拥有了这些选项检查:

  • 没有属性
  • 烘烤变换删除空组到路径 (实验)

它返回的新可绘制XML似乎是工作并正确渲染。

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

+0

我可以证实这对我有效与Illustrator CC 20.1.0。它使我的一天! –

+2

我确认即使没有使用http://inloop.github.io/svg2android/,Illutrator的“sa ve as”也能生成好的svg,但“export”不会。 –

+0

我可以用http://inloop.github.io/svg2android/确认这对我有效。非常感谢! 受影响的设备包括Android Studio仿真器和三星设备(即使在棉花糖上)。 – Cheruby

8

我在API 23上只有完全相同的问题。我是动态设置我的ImageView源代码,而不是使用xml。我意识到这个问题是我是这样做的:

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

当我应该做的事情:

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

我希望这可以帮助别人!

+1

这正是我做错了什么。感谢您的输入 –