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光柵化和調整大小以128dp

高達23.1,機器人被形成從設置VectorDrawable開始的光柵圖像。這個東西在支持庫的v23.2中發生了變化。如果您正確設置了build.gradle,則會發生此行爲。

如果您使用的是Gradle Plugin 2.0+,如果你正在使用1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

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

您同步後,清潔你的工作空間並重新建立添加

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

。你可以閱讀更多關於它herehere

+0

謝謝,我忽略增加generatedDensities部分,我沒有意識到所有的gradle可以柵格化圖像。 – Ben