6

Die neueste Version der Android-Support-Bibliothek (23.2) fügt Unterstützung für Vektor-Drawables hinzu. Es scheint dies zu tun, indem die Vektoren im Flug auf Plattformen gerastert werden, die vektorbasierte Zeichen nicht nativ unterstützen.Android-Support-Bibliothek 23.2 Vektor-Drawables sind verschwommen

Das Rasterbild scheint jedoch eine feste Größe zu haben, die eher von der Verwendung abhängt. Hier ist ein Beispiel.

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

Der Vektor 24dp x 24dp ist. Es wird in einem ImageView mit 128 dpi x 128 dpi verwendet. Auf Plattformen, die Vektor-Zeichnungsobjekte nicht unterstützen, ist das resultierende Bild unscharf, da der Vektor mit 16 dpi gerastert und auf 128 dpi geändert wird.

Die einzige Lösung, die ich gefunden habe, ist die Erstellung eines separaten Vektors, der für jede beabsichtigte Größe gezeichnet werden kann. Es ist ziemlich ärgerlich, eine Reihe von Duplikaten mit nur den Höhen- und Breitenänderungen zu erzeugen. Das löst das Problem nicht, wenn Sie möchten, dass das Zeichen auf fill_parent oder dynamisch auf andere Weise skaliert wird.

Um die Dimensionen Ihrer Vektorbilder in fortgeschrittenen fast zu definieren, vereitelt vollständig den Vorteil der Verwendung von Vektoren an erster Stelle.

Hat jemand eine echte Arbeit?

Antwort

11

der Vektor wird bei 16dp gerastert und

bis 23.1, Android aus dem bereitgestellten VectorDrawable wurde Schaffung Startrasterbilder 128dp verkleinert. Diese Sache hat sich in v23.2 der Support-Bibliothek geändert. Dieses Verhalten tritt auf, wenn Sie Ihre build.gradle richtig einrichten.

Wenn Sie die Gradle Plugin 2.0+ verwenden, fügen Sie

android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

wenn Sie 1.5.0

android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

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

, nachdem Sie synchronisieren, Ihren Arbeitsbereich reinigen und wieder aufzubauen. Sie können mehr darüber lesen here und here

+0

Dank, habe ich vergessen, generatedDensities Teil hinzufügen, und ich habe überhaupt nicht realisiert, dass Gradle die Bilder rasterisieren könnte. – Ben