在Android 21上使用fillType =“evenOdd”

时间:2016-12-16 16:49:17

标签: android svg vector android-vectordrawable

我想要包含在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?

还有其他解决办法吗?

5 个答案:

答案 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”属性。怎么样?选择路径。在右侧,“填充”属性中有一个设置图标。单击它并选择“非零”。

从主菜单中,选择“图层”→“路径”→“反向顺序”。我在图标的顶部找到了一个洞,并在应用程序中找到了洞。

For more detail

答案 1 :(得分:2)

带有filltype =“ evenOdd”的

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:drawableStartCompatapp:drawableEndCompat

享受:-):-)

答案 4 :(得分:-1)

转换SVG文件online,然后删除生成的xml文件中的android:fillType="evenOdd"。将xml文件复制并粘贴到res/drawable文件夹中。用它。 希望这有帮助!