6

最新のAndroidサポートライブラリ(23.2)では、ベクターのドロワーブルがサポートされています。ベクタ描画可能ファイルをネイティブにサポートしていないプラットフォームで、その場でベクタをラスタライズすることで、このように見えます。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"/> 

ベクターは24dp第X 24dpあります。 128dp x 128dpのImageViewで使用されています。ベクタードロアブルをサポートしていないプラットフォームでは、ベクターが16dpでラスタライズされ、128dpにサイズ変更されるため、結果として得られる画像はぼやけています。

私が見つけた唯一の解決策は、意図したサイズごとに別々のベクトル描画可能ファイルを作成することです。高さと幅の変更だけで、重複したベクトルの束を作成するのはかなり面倒です。また、drawableをfill_parentにしたい場合や、他の方法で動的にサイズを変更したい場合は、問題を解決できません。

ベクター画像の寸法を詳細に定義すると、はほぼになります。最初はベクターを使用する利点がありません。

誰でも真の回避策がありますか?

答えて

11

ベクターは16dpにラスタライズし、23.1まで

は、Androidが提供VectorDrawableから出発して、ラスタイメージを作成した128dpにサイズ変更されます。このことはサポートライブラリのv23.2で変更されました。この現象は、正しくbuild.gradleを設定した場合に発生します。あなたが同期した後、ワークスペースをきれいにし、再構築1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

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

を使用している場合

あなたがGradle Plugin 2.0+を使用している場合は、

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

を追加します。あなたはそれについてもっと読むことができますherehere

+0

おかげで、私はgeneratedDensitiesの部分を追加することを怠りました、そして、私はすべてのgradleが画像をラスタライズできることに気付きませんでした。 – Ben

関連する問題