13

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にするか、他の方法で動的にサイズを変更したい場合、それは問題を解決しません。

ベクター画像の寸法を事前に定義しなければならないことは、そもそもベクターを使用する利点をほぼ完全に無効にします。

誰かが本当の回避策を持っていますか?

4

2 に答える 2

17

ベクターは 16 dp でラスタライズされ、128 dp にサイズ変更されます

まで23.1、Android は提供された から始まるラスター イメージを作成していましVectorDrawableた。このことv23.2は、サポート ライブラリで変更されました。この動作は、 を正しくセットアップした場合に発生しますbuild.gradle

を使用している場合はGradle Plugin 2.0+、追加します。

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 } 

1.5.0 を使用している場合

 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 } 

同期したら、ワークスペースを消去して再度ビルドします。詳細については、こちらこちらをご覧ください。

于 2016-03-02T19:57:40.067 に答える