VectorDrawable-ロリポップ以前のバージョンのAndroidでどういうわけか利用できますか?[閉まっている]


87

バックグラウンド

Androidは、「VectorDrawable」(およびAnimatedVectorDrawable、BTW)と呼ばれるクラスを介して、ある種のベクター描画をサポートするようになったことに気づきました。Android-Studioの新機能を見て、それについて知りました。

これは、複数のフォルダ(に複数のファイルを置くために持っていることの終わりになるのだろうかmdpihdpixhdpi、など)。それは素晴らしいことであり、場合によってはアプリのサイズを最小化する可能性があります。

質問

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

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

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

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


3
私が見る限り、VectorDrawableはSVGファイルのアンドロイド化です。私が使用しているSVGを使用して年間のためにサードパーティのライブラリかかわらず、。(android-svgsvg-androidなど)。同様の名前のものがあります。それぞれが異なりますので、必要に応じて正確に選んでください。
Phantômaxx

7
SVGをxmlリソースベクトルに変換するためのオンラインツールを作成しました(ロリポップのみ)-inloop.github.io/svg2android-初期のアルファ版ではまだあまりテストされていません。それは単純なsvgファイルをサポートします(Androidがサポートするように)、私はそれをinkscapeでテストしました-いくつかの形状(rect、circle、spiral ...)を描画し、すべてを選択してから「Path-> Objecttopath」を選択して* .svgにエクスポートしサイトにドロップし、xmlを生成し、正常に動作します。
Yuraj 2014年

1
@Yurajうわー、それはとてもクールです!すごい仕事 !そして、そのような短い時間で...ここで、私の+1を取ります。:)
アンドロイド開発者

inloop.github.io/svg2android ...それはs a very usefull tool but Iこのような場合に不適切な結果を得ましおよび私なら、私は...さらにリリースのために、私は、このツールは悪いフォーマットについてnotiseてほしい、うーん...間違っているか知っている`tを3パーティlibsのすべてがOKですと...純粋なSVG-ファイルを使用
アレックスZezekalo

@AlexZezekalo Github Webページにそれについて書く必要があります:github.com/inloop/svg2android –android
開発者

回答:


39

2016年3月の更新

することでAndroidのサポートライブラリ23.2.1アップデート、サポートベクタードローアブルとアニメーションベクトルドローアブル。(同じようにlatestoneを使用することもできます)

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

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

ベクタードローアブルを使用すると、複数のpngアセットをXMLで定義された単一のベクターグラフィック置き換えることができます。以前ロリポップと高い装置に限定されている間の両方、VectorDrawableおよびAnimatedVectorDrawable二つの新しいサポートライブラリを通じて利用できるようになりましたサポート・ベクトル描画可能アニメーション-ベクトル描画可能。app:srcCompat参照ベクトルドローアブルへの新しい属性。

いくつかのサンプル例を使用して、githubのソースを確認してください。

v7 appcompatライブラリの変更点:

appcompatライブラリを使用する開発者がVectorDrawable、それに関連するビルドフラグを強制的に使用しないように、ベクターアセットへの依存関係を元に戻しました。


3
ベクターのサポートについては、gradleプラグインを更新し、「defaultConfig」内で「vectorDrawables.useSupportLibrary = true」を使用するだけで十分ではありませんか?
Androidデベロッパー

1
はい、Gradleプラグイン2.0以降およびGradleプラグイン1.5の場合は、追加する必要があります-> android {defaultConfig {generatedDensities = []} //これは2.0以降のGradleプラグインによって処理されますaaptOptions {additionalParameters "--no-version -vectors "}}
Amit Vaghela 2016年

1
また、ここにいくつかのコードを示してください。リンクはいつか死んでしまうかもしれません。この取り組みで+1がもらえます:)
Android開発者

はい、確かに。gitとここに短時間でコードを投稿します。
Amit Vaghela 2016年

2
上記のcompileステートメントは、プロジェクトが使用することを意味しますRecyclerViewが、常にそうであるとは限りません。
razzledazzle 2016年

13

アップデート2:サポートライブラリ23.4.0で再び有効になります:

AppCompatユーザー向けに、AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)を介してリソースからのサポートベクタードローアブル(23.2で見られる動作)を再度有効にするオプトインAPIを追加しました-これでもメモリ使用量の問題が発生する可能性があることに注意してください構成インスタンスの更新に問題があるため、デフォルトで無効になっている理由。

現在入手可能なこの23.4.0を確認してください

更新:これはバージョン23.3.0からは機能しません。詳細については、こちらを確認てください。プロキシドローアブルは機能しません。しかしapp:srcCompatsetImageResource()動作します。


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

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

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

次に、VectorDrawableのサポートを有効にします。Gradleプラグインを使用している場合、2.0以降

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

さもないと

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

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

第三に、リンクされた回答を参照してください。


はい、私はこれを見ました。拡張情報をありがとうございます。私は、システム全体のもののため(通知は、ウィジェットは、...)これは...もちろん利用できないのであると仮定
アンドロイド開発者は

それが機能することは確かです。その時点から基本的にドローアブルを参照します。試しましたか?そこでの例では、描画可能なベクトルをに設定しますMenuItem。これは正常に機能します。
razzledazzle 2016年

通知やウィジェットでも機能しますか?私はそれを古いAndroidバージョンで動作させることについて話している。彼らはこのためのベクトルをどのように扱うことができますか?彼らはサポートライブラリを使用できませんね?
Androidデベロッパー

サポートライブラリバージョンを使用することの全体的なポイントは、古いバージョンで動作させることです。記載されているように、それはAPI 11からのすべてのAPI 7への道バックとアニメーションベクトルドローアブルに動作します
razzledazzle

繰り返しますが、これはアプリ内で機能しますが、通知やウィジェットなど、外部で使用しようとするとどうなりますか?通知バーはもちろん、他のアプリ(ランチャー)にサポートライブラリを使用させることはできないと思うので、そこでは機能しないと思います。試しましたか?
Androidデベロッパー

12

このサポートライブラリを試すことができます。Lollipopで導入されたVectorDrawableとAnimatedVectorDrawableをサポートし、完全な下位互換性があります。


そのライブラリはAPIレベル14以上とのみ互換性がありますが、MrVectorライブラリは7以上まで互換性があります。
ドンターナー2015

@donturner:私はあなたの意見に同意しますが、開発者はまだ7API用のアプリを開発しているとは思いません。
v_J 2015

4
API 7ではないかもしれませんが、Android市場の4.1%を占めるAPI 10(Gingerbread)(developer.android.com/about/dashboards/index.html)です。
ドンターナー2015

8

ここでの回答のいくつかを補足するために:はい、少なくとも部分的に、VectorDrawablespre-Lollipopのサポートを得ることができます

どのくらい部分的ですか?状況によって異なります-私はこの図を参考にして作成しました(サポートライブラリ23.4.0から-少なくとも-25.1.0まで有効)。

VectorDrawableチートシート


確かに、私はあなたが自動生成PNGファイルにそれを許可した場合、それは安全であるべきだと思う
Androidデベロッパー

1
正確に説明されています。
Abhijit Kurane 2017

これは受け入れられた答えでなければなりません。ありがとう。
JustinMeiners19年

6

残念ながら、現時点では、VectorDrawableとAnimatedVectorDrawableはサポートライブラリで利用できません。ただし、プレロリポップバージョンでこの機能を利用するには、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);

お役に立てれば。


1
MrVectorは数日前に非推奨になり、サポートライブラリの一部となる次のVectorDrawableCompatが採用されました。
WindRider 2015

かっこいい。情報をありがとう。
gnuanu 2015

ええ、私はいくつかの太ったお尻のSVGで私のアプリをポン引きするのが待ちきれません:D
WindRider 2015

1
非推奨。代わりに、このstackoverflow.com/a/30502261/1954675を使用してください。
v_J 2015

3

VectorDrawableを使用している場合、Android Studioは、プレロリポップバージョンのPNGファイル(XMLファイルに基づく)を自動的に生成します。

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

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


はい、最近公開されました。ただし、ベクターを使用する代わりにPNGを使用しているため、画像を保持するimageViewのサイズを変更すると、ピクセル化/ぼやけます。
Androidデベロッパー

@android開発者:あなたは部分的に正しいです。この動作は発生しますが、これはVectorDrawablesでも同じです。各VectorDrawableには、XML内で定義された幅と高さがあります(例:vector_drawable.xml)。この幅/高さが50x50dpに設定されているが、ImageViewサイズを100x100dpに設定している場合、Android 5.0を実行している場合でも結果はぼやけます(したがって、自動生成されたBitmapDrawableの代わりにVectorDrawableを使用しています)。一般的なビットマップに対するVectorDrawableの本当の利点は、screen-dpiを考慮に入れているため、4kディスプレイでもぼやけないことです。
mehlyfication 2015年

設定されていないサイズを使用すると、VectorDrawableがうまく表示されないということですか?しかし、それはベクトル化されたコンテンツです....それ以外の場合はなぜ機能するのでしょうか?
Androidデベロッパー

Animated Vector Drawablesのpngも生成されますか?
Louis CAD

いいえ、その場合はPNGを作成しません。あなたは以前のAndroid 5.0へのAndroidのバージョンを実行しているデバイス上でアニメーションベクトル描画可能にしたい場合は、VectorDrawableCompatをしようとする場合があります:developer.android.com/reference/android/support/graphics/...
Mehlyfication

3

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

私が見つけた最良の解決策はあるBetterVectorDrawableと一緒にlibにVectorDrawableコンバータSVG

BetterVectorDrawableは、Android 4.0以降のVectorDrawable実装であり、Android5.0以降で構成可能なフォールバック動作を備えています。

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

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


2

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

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


したがって、これはLollipopが十分に人気を博した場合にのみ関係し、それでも多くの機能を提供しません。:(
開発者

新しいベクターAPIのチュートリアル/サンプル/ビデオを知っていますか?
Androidの開発者


1

素晴らしいニュースは、GoogleがAndroidサポートライブラリ23.2サポートベクタードローアブルとアニメーションベクタードローアブルをリリースしたことです!

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

これがAppCompatライブラリの優れた点であり、Androidの新機能の多くを以前のバージョンに戻すことができます。新しく実装されたVectorDrawableクラスにより、開発者はAPI 7(Android 2.1 Eclair)までずっとベクター画像を使用できるようになりました。アニメーション化されたベクターはもう少し制限されており、API 11(Android 3.0 Honeycomb)までさかのぼりますが、それでも現在アクティブに使用されているデバイスの97%以上が含まれています

使用ガイド:

ベクトルの年齢」を参照してください@chrisbanesによる」を


1
いいね!新しいサポートライブラリのvectorsAPIの使用方法に関するサンプル/チュートリアルを共有していただけますか?
Androidデベロッパー

承知しました !すでにそれを私の週末のやることリストに追加しました!:)
LOG_TAG 2016

1
ありがとうございました。短い場合は、こちらにもご記入ください。
Androidデベロッパー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.