Androidプロジェクトに含めたいSVG画像があります。
プロジェクトのminSdkバージョンは9です。Android StudioはSVG用のPNGファイルを生成しています。
ただし、API 21以降の場合、Android studioはSVGをdrawable-anydpi-v21
リソースフォルダ。
つまり、API 21以降を実行しているデバイスは、PNGではなくSVGを使用します。
そしてそれが問題です。私のSVGにはAndroid:fillType="evenOdd"
。
PNGは適切に生成されますが、SVGの場合、その属性はAPI 24+であるため、API 21デバイスでは無視され、ワイヤーフレームのような画像ではなく、画像が塗りつぶされて表示されます。
とにかくAndroidスタジオにPNGのみを含め、SVGを完全にドロップするように説得する方法はありますか?
これの他の解決策はありますか?
ソリューション1
Sketch のFlattern画像と this site を使用してSVGをAndroidのxmlに変換します
ソリューション2
私はevenOddの代わりにnonZeroを使用し、それをSketchで開いて逆順にした後、それがpathDataを変更してAndroid:fillTypeを削除し、すべてがAndroid 21+で正常に動作します。
ソリューション3
PNG
TLDR
いくつかの調査の後、ベクターグラフィックス、SVGには2つの塗りつぶしルールプロパティメソッドがあることを発見しました。「偶数」と「非ゼロ」です。
SketchでSVGアイコンを開き、アイコンの上部にある穴を調べました。予想通り、fill-rule:evenoddプロパティを使用します。ここで、「ゼロ以外」のプロパティを使用するようにフィルルールを変更する必要があります。どうやって?パスを選択します。右側の「塗りつぶし」プロパティに設定アイコンがあります。それをクリックして、「ゼロ以外」を選択します。
メインメニューから、レイヤー→パス→逆順を選択します。アイコンの上部に穴を開け、アプリにも穴を開けました。
Filltype = "evenOdd"のSVGは、Android gradle plugin 3.2で正常に動作し、表示されるようです。サポートライブラリ28またはAndroidX 1.0を使用する必要がある場合もあります。
それが最上位のbuild.gradleで少なくともこのバージョンであることを確認してください:
classpath 'com.Android.tools.build:gradle:3.2.0'
あなたはあなたのsvgをxmlファイルに変換することができます、それはあなたの問題を解決します、これはsvgをxmlファイルに変換するためのリンクです svgToXML
属性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
に変更します。
楽しい :-) :-)