我想要包含在Android项目中的SVG图像。
该项目的minSdk版本为9. Android Studio正在为SVG生成PNG文件。
但是,对于API 21+,Android Studio将SVG包含在drawable-anydpi-v21
资源文件夹中。
这意味着运行API 21及更高版本的任何设备都将使用SVG而不是PNG。
这就是问题所在:我的SVG需要android:fillType="evenOdd"
。
PNG是正确生成的,但是对于SVG,因为该属性是API 24+,它在API 21设备上被忽略,并且图像显示为填充而不是类似线框的图像。
有没有说服Android工作室只包含PNG并完全丢弃SVG?
还有其他解决办法吗?
答案 0 :(得分:2)
解决方案1
Sketch中的Flattern图片并使用this site将SVG转换为适用于Android的xml
解决方案2
我使用nonZero而不是evenOdd并在Sketch中打开它以反转Order后反转它将更改pathData并删除android:fillType并且一切正常在Android 21 +上运行。
解决方案3
PNG
TLDR
经过一些研究后我发现有两种填充规则属性方法用于矢量图形,SVG,“偶数”与“非零”
我在Sketch中打开了SVG图标并检查了图标顶部的孔。正如预期的那样,它使用fill-rule:evenodd属性。现在我必须更改fill-rule以使用“nonzero”属性。怎么样?选择路径。在右侧,“填充”属性中有一个设置图标。单击它并选择“非零”。
从主菜单中,选择“图层”→“路径”→“反向顺序”。我在图标的顶部找到了一个洞,并在应用程序中找到了洞。
答案 1 :(得分:2)
SVG现在可以在Android gradle插件3.2中正常工作并显示。您可能还需要使用支持库28或AndroidX 1.0。
确保至少在您的顶级build.gradle中是此版本:
if (breed == "pitbull")
答案 2 :(得分:1)
你可以将你的svg转换为xml文件,这将解决你的问题, 以下是将svg转换为xml文件svgToXML
的链接答案 3 :(得分:1)
属性android:fillType
仅在API级别24和更高版本中使用。对于API级别以下的用户,请按照以下步骤操作。
1)将此添加到您的gradle文件中。
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
2)现在,如果您使用的是 ImageView ,请将其属性android:src
更改为app:srcCompat
。
3)如果在TextView中用作 drawableStart 或 drawableEnd ,请将其更改为app:drawableStartCompat
或app:drawableEndCompat
。
享受:-):-)
答案 4 :(得分:-1)
转换SVG文件online,然后删除生成的xml文件中的android:fillType="evenOdd"
。将xml文件复制并粘贴到res/drawable
文件夹中。用它。
希望这有帮助!