6

L'ultima versione di Android Support Library (23.2) aggiunge il supporto per i drawable vettoriali. Sembra farlo rasterizzando i vettori al volo su piattaforme che non supportano nativamente i drawable vettoriali.Libreria di supporto Android 23.2 i drawable vettoriali sono sfocati

Tuttavia, l'immagine di rasterizzazione sembra essere una dimensione fissa piuttosto che dipendente dall'utilizzo. Ecco un esempio.

Vector

<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> 

layout

<ImageView 
    android:layout_width="128dp" 
    android:layout_height="128dp" 
    android:id="@+id/imageView" 
    app:srcCompat="@drawable/vector1"/> 

Il vettore è 24dp x 24dp. È utilizzato in un ImageView che è 128dp x 128dp. Sulle piattaforme che non supportano i drawable vettoriali, l'immagine risultante è sfocata perché il vettore viene rasterizzato a 16 dpi e ridimensionato a 128 dpi.

L'unica soluzione che ho trovato è quella di creare un vettore separato disegnabile per ciascuna dimensione desiderata. È piuttosto noioso creare una serie di vettori duplicati con solo le modifiche di altezza e larghezza. E questo non risolve il problema se si desidera che il drawable sia fill_parent o che venga dimensionato dinamicamente in qualche altro modo.

Dovendo definire le dimensioni delle immagini vettoriali in avanzato , quasi sconfigge completamente il vantaggio di utilizzare i vettori in primo luogo.

Qualcuno ha un vero lavoro in giro?

risposta

11

il vettore viene rasterizzata 16dp e ridimensionati a 128dp

fino a 23.1, Android era creare immagini raster partire dalla condizione VectorDrawable. Questa cosa è cambiata in v23.2 della libreria di supporto. Questo comportamento si verifica se imposti correttamente il tuo build.gradle.

Se si utilizza il Gradle Plugin 2.0+, aggiungere

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

se si utilizza 1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

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

dopo la sincronizzazione, pulire l'area di lavoro e costruire di nuovo. Potete leggere di più su di esso here e here

+0

Grazie, ho omesso di aggiungere la parte generateDensities e non mi sono reso conto che il gradle potrebbe rasterizzare le immagini. – Ben

Problemi correlati