6

Najnowsza wersja biblioteki pomocy systemu Android (23.2) dodaje obsługę wektorów. Wydaje się, że robi to poprzez rasteryzację wektorów w locie na platformach, które natywnie nie obsługują wektorów.Biblioteka Pomocników Androida 23.2 grafika wektorowa jest rozmazana

Jednak obraz rasteryzacji wydaje się być stałym rozmiarem, a raczej zależny od użycia. Oto przykład.

Wektor

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

Układ

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

Wektor jest 24dp x 24dp. Jest używany w ImageView, który ma 128dp x 128dp. Na platformach, które nie obsługują wektorów, powstały obraz jest niewyraźny, ponieważ wektor jest rasteryzowany przy 16dp i zmieniany na 128dp.

Jedyne rozwiązanie, jakie znalazłem, to stworzenie osobnego losowania wektorowego dla każdego zamierzonego rozmiaru. To dość denerwujące, aby utworzyć grupę duplikatów wektorów z jedynie zmianami wysokości i szerokości. I to nie rozwiązuje problemu, jeśli chcesz, aby losowanie było wypełnione lub wypełnione dynamicznie w inny sposób.

Konieczność zdefiniowania wymiarów obrazów wektorowych w zaawansowanym niemalże całkowicie niweczy korzyści używania wektorów.

Czy ktoś ma prawdziwą pracę?

Odpowiedz

11

wektor jest zrastrowane w 16dp i zmniejszane do 128dp

do 23.1 Android tworzył rastrowych obrazów począwszy od przewidzianego VectorDrawable. To coś zmieniło się w v23.2 biblioteki obsługi. To zachowanie się dzieje, jeśli poprawnie skonfigurujesz swoje build.gradle.

Jeśli używasz Gradle Plugin 2.0+, dodać

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

jeśli używasz 1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

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

po zsynchronizowaniu oczyścić swoje miejsce pracy i budować ponownie. Możesz przeczytać więcej na ten temat here i here

+0

Dzięki, zaniedbałem dodanie części generateDensities i nie zdawałem sobie sprawy, że gradle może rasteryzować obrazy. – Ben