Android サポート ライブラリの最新バージョン (23.2) では、ベクター ドローアブルのサポートが追加されています。これは、ベクター ドローアブルをネイティブにサポートしていないプラットフォームでベクターをオンザフライでラスタライズすることによって行われているようです。
ただし、ラスタライズされた画像は、使用法に依存するのではなく、固定サイズのようです。例を次に示します。
ベクター
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm0,3c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zm0,14.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
</vector>
レイアウト
<ImageView
android:layout_width="128dp"
android:layout_height="128dp"
android:id="@+id/imageView"
app:srcCompat="@drawable/vector1"/>
ベクターは 24 dp x 24 dp です。128dp x 128dp の ImageView で使用されます。ベクター ドローアブルをサポートしていないプラットフォームでは、ベクターが 16 dp でラスタライズされ、128 dp にサイズ変更されるため、結果の画像はぼやけます。
私が見つけた唯一の解決策は、意図したサイズごとに個別のベクター ドローアブルを作成することです。高さと幅だけを変更して重複したベクターを大量に作成するのはかなり面倒です。そして、ドローアブルをfill_parentにするか、他の方法で動的にサイズを変更したい場合、それは問題を解決しません。
ベクター画像の寸法を事前に定義しなければならないことは、そもそもベクターを使用する利点をほぼ完全に無効にします。
誰かが本当の回避策を持っていますか?