web-dev-qa-db-ja.com

VectorDrawable-以前のバージョンのAndroidで何らかの形で利用可能ですか?

バックグラウンド

Androidは、「 VectorDrawable 」というクラスを介して、何らかの種類のベクター描画をサポートするようになりました。 = "(および AnimatedVectorDrawable 、BTW)。 Android-Studio の新機能を見て、それを見つけました。

これで、複数のファイルを複数のフォルダー(mdpihdpixhdpiなど)に入れる必要がなくなるのではないかと思います。それは素晴らしいことであり、場合によってはアプリのサイズを最小化するかもしれません。

質問

この新しいクラスに関していくつか質問をしたいと思います。

  1. Googleのサポートライブラリのライブラリを介して、古いAndroidバージョンで使用することは可能ですか?

  2. 私はそれがどのように機能するかについて詳しくありませんが、LollipopはSVGファイルを処理できますか? SVGファイルで達成可能なことは何でもできますか?

  3. 私が見つけたドキュメント以外に、それを使用するサンプル/チュートリアル/ビデオはありますか?

84

2016年3月更新

Android Support Library 23.2.1 update、ベクターDrawableとアニメーションベクターDrawableをサポート(最新バージョンの同じ)

Gradleファイルのライブラリのバージョンを更新してください。

compile 'com.Android.support:recyclerview-v7:23.2.1'

ベクタードロウアブルを使用すると、XMLで定義されている複数のpngアセットを単一のベクターグラフィックで置き換えるを使用できます。 以前はLollipop以上のデバイスに制限されていましたがVectorDrawableAnimatedVectorDrawableの両方が2つの新しいサポートライブラリで利用可能になりましたsupport-vector-drawableおよびanimated-vector-drawable。参照ベクトルdrawablesへの新しいapp:srcCompat属性。

githubのソースをいくつかの サンプルの例 でチェックします。

v7 appcompatライブラリの変更:

Appcompatライブラリーを使用する開発者がVectorDrawableとそれに関連するビルドフラグを使用することを強制されないように、ベクター資産への依存関係を元に戻しました。

39
Amit Vaghela

Update 2:サポートライブラリ23.4.0で再度有効にします:

AppCompatユーザー向けに、オプトインAPIを追加し、AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)を介してリソースからのベクターDrawables(23.2で見つかった動作)を再度有効にします。これにより、メモリ使用量と構成インスタンスの更新に問題があるため、デフォルトで無効になっている理由。

これを確認してください 23.4.0が利用可能になりました

Update:これはバージョン23.3.0以降では動作しません- here をチェックしてくださいプロキシドローアブルは機能しません。ただし、app:srcCompatおよびsetImageResource()は機能します。


Vector Drawableのサポートは、バージョン23.2以降のサポートライブラリから利用できます。ただし、これらのドロアブルを適切に使用するには、間接的に参照する必要があります。

最初のステップは、AppCompatバージョンをバンプすることです。

compile 'com.Android.support:appcompat-v7:23.2.0'

SecondVector Drawableサポートを有効にします。 Gradleプラグインを使用する場合、2.0 +

Android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

そうでなければ

Android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

3番目、リンクされた answer を参照してください。

12
razzledazzle

これを試すことができます サポートライブラリ 。 Lollipopで導入されたVectorDrawableとAnimatedVectorDrawableを完全に後方互換性でサポートします。

12
V_J

ここでいくつかの回答を補完するために、はい、Lollipop以前のVectorDrawablesのサポートを少なくとも部分的に取得できます。

部分的ですか?依存します-私は この図 を支援しました(サポートライブラリ23.4.0から-少なくとも-25.1.0に有効)。

VectorDrawable cheatsheet

8
David Ferrand

残念ながら、現時点では、VectorDrawableとAnimatedVectorDrawableはサポートライブラリで利用できません。しかし、Lollipop以前のバージョンでこの機能を利用するには、MrVectorと呼ばれる非公式のバックポートを使用できます。

MrVectorはGithubで利用可能 およびAndroidバージョン7以降をサポートします。

公式のReadmeから

MrVector依存関係を追加するには、build.gradle依存関係ブロックに次の行を追加します。

compile 'com.telly:mrvector:0.2.0'

ベクターXMLからドロアブルを作成するには、

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_Android);

お役に立てれば。

6
gnuanu

Lollipopは、サードパーティのライブラリがないとSVGファイルを処理できません。

私が見つけた最良の解決策は、 BetterVectorDrawable libと SVG to VectorDrawable Converter です。

BetterVectorDrawableは、Android 4.0+のVectorDrawable実装であり、Android 5.0+でフォールバック動作を構成できます。

SVG to VectorDrawable Converterは、SVG画像からAndroid VectorDrawable XMLリソースファイルへのバッチコンバーターです。 オンラインバージョン

リンクはreadmeを指し、libとコンバーターの使用方法に関する十分な情報を提供します。

3
A-student

VectorDrawableを使用している場合、Android St​​udioは、Lollipop以前のバージョンのPNGファイル(XMLファイルに基づく)に従って自動的に生成します。

これらの生成されたPNGファイルは、21未満のAPIを実行しているデバイスではVectorDrawablesではなくBitmapDrawablesと見なされるため、それらのデバイスでアニメーション化または類似することはできません。

詳細については、「後方互換性」を参照してください。 http://Android-developers.blogspot.co.at/2015/09/Android-studio-14.html

3
Mehlyfication

現時点では、サポートライブラリにVectorDrawableはありません。

Funkysteinは正しい-VectorDrawableはSVGに似ており、Androidがパフォーマンスに集中できるように、最も需要の高いベクター描画の機能のみをサポートします。たとえば、pathDataの形式は、SVGの「d」文字列と同じです。

2
George Mount

Googleが Android Support Library 23.2 Support Vector DrawablesとAnimated Vector Drawablesをリリースしたことは素晴らしいニュースです!

しかし、Googleの前にこのライブラリを移植した人々に感謝します!

これがAppCompatライブラリの優れたところです。Androidの多くの新機能を以前のバージョンに戻すことができます。新しく実装されたVectorDrawableクラスを使用すると、開発者はベクター画像をAPI 7(Android 2.1 Eclair)まで使用できます。アニメーションベクトルは、API 11(Android 3.0 Honeycomb)までさかのぼるだけで、もう少し制限されていますが、それでも今日アクティブに使用されているデバイスの97%以上を網羅しています

使用ガイド:

参照 " ベクトルの年齢 "by @chrisbanes

1
LOG_TAG