Use fillType=“evenOdd” on Android 21

和自甴很熟 提交于 2020-02-29 11:35:12

问题


I have an SVG image that I want to include in an Android project.

The minSdk version for the project is 9. Android Studio is generating PNG files for the SVG.

However, for API 21+, Android studio includes the SVG in a drawable-anydpi-v21 resource folder.

That means that any device running API 21 and up will use the SVG instead of the PNGs.

And that is the problem: my SVG requires android:fillType="evenOdd".

The PNG are properly generated, but for the SVG, because that attribute is API 24+, it is ignored on API 21 devices, and the image appears filled instead of being a wireframe-like image.

Is there anyway to convince Android studio to only include the PNG and drop the SVG completely?

Is there an other solution for this?


回答1:


Solution 1

Flattern image in Sketch and use this site to convert SVG to xml for Android

Solution 2

I use nonZero instead of evenOdd and open it in Sketch to reverse Order after reverse it will change pathData and remove android:fillType and everything work fine on Android 21+.

Solution 3

PNG

TLDR

After some research I found that there are two fill-rule property methods for Vector graphics, SVGs, the “evenodd” vs “nonzero”

I opened the SVG icon in Sketch and inspected the hole at the top of the icon. As expected it uses fill-rule:evenodd property. Now I have to change the fill-rule to use “nonzero” property. How? Select the path. In the right side, there is a settings icon at the “Fills” property. Click it and choose “non-zero”.

From the main menu, choose Layer → Paths → Reverse Order. I got the hole back at the top of the icon and got the hole in the app, too.

For more detail




回答2:


SVGs with filltype="evenOdd" seems to work and display properly now with Android gradle plugin 3.2. You may also need to use Support Library 28 or AndroidX 1.0.

Make sure it's at least this version in your top level build.gradle:

classpath 'com.android.tools.build:gradle:3.2.0'



回答3:


you can convert your svg to xml files, that will solve your problem, Here is the link for converting svg to xml files svgToXML




回答4:


Attribute android:fillType is only used in API level 24 and higher. For below API level, follow these steps.

1) add this to your gradle file.

// Gradle Plugin 2.0+  
   android {  
     defaultConfig {  
        vectorDrawables.useSupportLibrary = true  
     }  
   }  

2) Now, If you are using ImageView, change its proprty android:src to app:srcCompat.

3) If you are using as drawableStart or drawableEnd in TextView, change it to app:drawableStartCompat or app:drawableEndCompat.

Enjoy :-) :-)




回答5:


Convert your SVG file online, then remove android:fillType="evenOdd" in the generated xml file. Copy and paste the xml file in the res/drawable folder. Use it. Hope this helps!



来源:https://stackoverflow.com/questions/41188944/use-filltype-evenodd-on-android-21

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!