Wichtige Fakten
- Ein Vektor-Drawable ist eine Vektorgrafik, die in einer XML-Datei als eine Reihe von Punkten, Linien und Kurven und die zugehörigen Farbinformationen an.
- Vektor-Drawables sind skalierbar, d. h. ihre Größe kann ohne Qualitätsverlust angepasst werden. Dadurch eignen sie sich ideal für Android-Apps, da Sie so die Größe Ihres APK-Dateien herunterladen und die Leistung verbessern.
- Du kannst Vektor-Drawables in Android Studio erstellen, indem du mit der rechten Maustaste auf den Drawable-Ordner klickst. in Ihrem Projekt auf und klicken Sie auf „New“ (Neu) > Vektor-Asset. Sie können SVG-Dateien auch in Android Studio als Vektor-Drawables
Einführung
VectorDrawable
ist eine Vektorgrafik,
in einer XML-Datei als eine Reihe von Punkten, Linien und Kurven sowie
Farbinformationen. Der Hauptvorteil von Vektorgrafiken ist die Bildskalierung. Sie kann ohne Qualitätsverlust skaliert werden, d. h., die gleiche Datei wird für unterschiedliche Bildschirmdichten ohne Qualitätsverlust in der Größe angepasst.
Dadurch sind die APK-Dateien kleiner und der Wartungsaufwand für die Entwickler ist geringer. Sie können auch Vektorbilder für die Animation verwenden, indem Sie mehrere XML-Dateien anstelle mehrerer Bilder für jede Bildschirmauflösung verwenden.
Auf dieser Seite und im Video unten finden Sie eine Übersicht dazu, wie Sie Vektorgrafiken in XML erstellen. Android Studio kann SVG-Dateien auch in das Vektor-Drawable-Format konvertieren, wie unter indem Sie Vektorgrafiken mit mehreren Punktdichten hinzufügen verwenden.
Android 5.0 (API-Level 21) war die erste Version, die Vektorgrafiken mit VectorDrawable
und AnimatedVectorDrawable
offiziell unterstützte. Sie können jedoch ältere Versionen mit der Android-Supportbibliothek unterstützen, die die Klassen VectorDrawableCompat
und AnimatedVectorDrawableCompat
bereitstellt.
Klasse „VectorDrawable“
Mit VectorDrawable
wird ein statisches Zeichnenobjekt definiert. Ähnlich wie beim SVG-Format wird jede Vektorgrafik als Baumstruktur definiert
Hierarchie, die aus path
- und group
-Objekten besteht.
Jedes path
enthält die Geometrie des Umrisses des Objekts und
group
enthält Details zur Transformation. Alle Pfade werden in der Reihenfolge gezeichnet, in der sie in der XML-Datei erscheinen.

Abbildung 1: Beispielhierarchie eines Vektor-Drawable-Assets
Das Vektor-Asset Studio-Tool eine einfache Möglichkeit, dem Projekt eine Vektorgrafik hinzuzufügen. als XML-Datei hochladen.
Beispiel für XML
Hier ist ein Beispiel für eine VectorDrawable
-XML-Datei, die ein Bild rendert.
eines Akkus im Lademodus.
<!-- res/drawable/battery_charging.xml --> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:width="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0"> <group android:name="rotationGroup" android:pivotX="10.0" android:pivotY="10.0" android:rotation="15.0" > <path android:name="vect" android:fillColor="#FF000000" android:pathData="M15.67,4H14V2h-4v2H8.33C7.6,4 7,4.6 7,5.33V9h4.93L13,7v2h4V5.33C17,4.6 16.4,4 15.67,4z" android:fillAlpha=".3"/> <path android:name="draw" android:fillColor="#FF000000" android:pathData="M13,12.5h2L11,20v-5.5H9L11.93,9H7v11.67C7,21.4 7.6,22 8.33,22h7.33c0.74,0 1.34,-0.6 1.34,-1.33V9h-4v3.5z"/> </group> </vector>
Diese XML rendert das folgende Bild:

Klasse „AnimatedVectorDrawable“
Mit AnimatedVectorDrawable
werden den Eigenschaften einer Vektorgrafik Animationen hinzugefügt. Sie können eine animierte Vektorgrafik als drei separate
Ressourcendateien oder als einzelne XML-Datei, die das gesamte Drawable definiert. Sehen wir uns beide Ansätze genauer an: Mehrere XML-Dateien und Einzelne XML-Datei.
Mehrere XML-Dateien
Mit diesem Ansatz können Sie drei separate XML-Dateien definieren:
- Eine
VectorDrawable
-XML-Datei. -
Eine
AnimatedVectorDrawable
-XML-Datei, die das ZielVectorDrawable
, die Zielpfade und ‑gruppen, die animiert werden sollen, die Eigenschaften und die alsObjectAnimator
-Objekte oderAnimatorSet
-Objekte definierten Animationen definiert. - Eine Animations-XML-Datei.
Beispiel für mehrere XML-Dateien
Die folgenden XML-Dateien zeigen die Animation einer Vektorgrafik.
- XML-Datei von VectorDrawable:
vd.xml
-
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:name="vectorPath" android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector>
- XML-Datei von AnimatedVectorDrawable:
avd.xml
-
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vd" > <target android:name="rotationGroup" android:animation="@anim/rotation" /> <target android:name="vectorPath" android:animation="@anim/path_morph" /> </animated-vector>
- Animator-XML-Dateien, die in der XML-Datei des AnimatedVectorDrawable verwendet werden:
rotation.xml
undpath_morph.xml
-
<objectAnimator android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" />
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="3000" android:propertyName="pathData" android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z" android:valueTo="M300,70 l 0,-70 70,0 0,140 -70,0 z" android:valueType="pathType"/> </set>
Einzelne XML-Datei
Auf diese Weise kannst du die zugehörigen XML-Dateien zu einem einzigen
XML-Datei im XML-Bundle-Format. Beim Erstellen der App werden mit dem aapt
-Tag separate Ressourcen erstellt und im animierten Vektor darauf verwiesen. Für diesen Ansatz sind Build Tools 24 oder höher erforderlich.
Die Ausgabe ist abwärtskompatibel.
Beispiel für eine einzelne XML-Datei
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <aapt:attr name="android:drawable"> <vector android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24"> <path android:name="root" android:strokeWidth="2" android:strokeLineCap="square" android:strokeColor="?android:colorControlNormal" android:pathData="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" /> </vector> </aapt:attr> <target android:name="root"> <aapt:attr name="android:animation"> <objectAnimator android:propertyName="pathData" android:valueFrom="M4.8,13.4 L9,17.6 M10.4,16.2 L19.6,7" android:valueTo="M6.4,6.4 L17.6,17.6 M6.4,17.6 L17.6,6.4" android:duration="300" android:interpolator="@android:interpolator/fast_out_slow_in" android:valueType="pathType" /> </aapt:attr> </target> </animated-vector>
Abwärtskompatibilitätslösung für Vektor-Drawables
Zur Unterstützung von Vektor-Drawable und animierten Vektor-Drawables auf Geräten mit niedrigeren Plattformversionen
als Android 5.0 (API-Level 21) oder fillColor
, fillType
und
strokeColor
-Funktionen vor Android 7.0 (API-Level 24),
VectorDrawableCompat
und AnimatedVectorDrawableCompat
sind über zwei Supportbibliotheken verfügbar:
support-vector-drawable
und animated-vector-drawable
,
.
Eingeschränkte Kompatibilitätsunterstützung für Vektoren mit Android Studio 1.4
durch Erzeugen von PNG-Dateien zum Build-Zeitpunkt. Die Support-Bibliotheken für Vektorgrafiken und animierte Vektorgrafiken bieten jedoch sowohl Flexibilität als auch breite Kompatibilität. Da es sich um eine Support-Bibliothek handelt, können Sie sie mit allen Android-Plattformversionen ab Android 2.1 (API-Ebene 7 und höher) verwenden. Wenn Sie Ihre App so konfigurieren möchten, dass sie Vektor-Support-Bibliotheken verwendet, fügen Sie der Datei build.gradle
im App-Modul das Element vectorDrawables
hinzu.
Verwenden Sie das folgende Code-Snippet, um das vectorDrawables
-Element zu konfigurieren:
Groovy
// For Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
Kotlin
// For Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
Groovy
// For Gradle Plugin 1.5 or below android { defaultConfig { // Stops the Gradle plugin’s automatic rasterization of vectors generatedDensities = [] } // Flag notifies aapt to keep the attribute IDs around aaptOptions { additionalParameters "--no-version-vectors" } }
Kotlin
// For Gradle Plugin 1.5 or below android { defaultConfig { // Stops the Gradle plugin’s automatic rasterization of vectors generatedDensities() } // Flag notifies aapt to keep the attribute IDs around aaptOptions { additionalParameters("--no-version-vectors") } }
Sie können VectorDrawableCompat
und AnimatedVectorDrawableCompat
auf allen Geräten mit Android 4.0 (API-Level 14) und höher verwenden. Da Android Drawables auf unterschiedliche Weise lädt, ist das Laden von Vektor-Drawables nicht an allen Stellen möglich, an denen eine Drawable-ID akzeptiert wird, z. B. in einer XML-Datei. Die
android.support.v7.appcompat
Paket hat eine Nummer hinzugefügt
um die Verwendung
von Vektor-Drawables zu erleichtern. Erstens: Wenn Sie
android.support.v7.appcompat
Paket mit
ImageView
oder mit abgeleiteten Klassen wie
ImageButton
und
FloatingActionButton
, Sie können
das neue Attribut app:srcCompat
verwenden, um auf Vektor-Drawables zu verweisen
sowie alle anderen für android:src
verfügbaren Drawables:
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_add" />
Um Drawables zur Laufzeit zu ändern, kannst du die
setImageResource()
wie zuvor beschrieben. AppCompat
wird verwendet
und app:srcCompat
ist die sicherste Methode für die Integration
Vektor-Drawables in deine App ein.
Die Support Library 25.4.0 und höher unterstützt die folgenden Funktionen:
- Pfad-Morphing (PathType-Evaluator) zum Morphen verwendet in einen anderen Pfad.
- Pfadinterpolation: Wird verwendet, um eine flexible Interpolator (dargestellt als Pfad) anstelle des vom System definierten Interpolatoren wie LinearInterpolator an.
Die Support Library 26.0.0-beta1 und höher unterstützt die folgenden Funktionen:
- Entlang des Pfades bewegen: Das Geometrieobjekt kann sich bewegen, als Teil einer Animation entlang eines beliebigen Pfads.
Beispiel für mehrere XML-Dateien mit der Supportbibliothek
Die folgenden XML-Dateien veranschaulichen die Vorgehensweise für die Verwendung mehrerer XML-Dateien. Vektorgrafiken zu erstellen.
- XML-Datei von VectorDrawable:
vd.xml
-
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:name="vectorPath" android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector>
- XML-Datei von AnimatedVectorDrawable:
avd.xml
-
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vd" > <target android:name="rotationGroup" android:animation="@anim/rotation" /> </animated-vector>
- Animator-XML-Datei, die in der XML-Datei von animateVectorDrawable verwendet wird
Datei:
rotation.xml
-
<objectAnimator android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" />
Einzelne XML-Datei
In der folgenden XML-Datei wird gezeigt, wie eine einzelne XML-Datei zum Animieren einer Vektorgrafik verwendet wird. Beim Erstellen der App werden mit dem aapt
-Tag separate Ressourcen erstellt und im animierten Vektor darauf verwiesen. Für diesen Ansatz sind Build Tools 24 oder höher erforderlich.
Die Ausgabe ist abwärtskompatibel.
Beispiel für eine einzelne XML-Datei mit der Supportbibliothek
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt"> <aapt:attr name="android:drawable"> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="64dp" android:height="64dp" android:viewportWidth="600" android:viewportHeight="600"> <group android:name="rotationGroup" android:pivotX="300" android:pivotY="300" android:rotation="45.0" > <path android:name="vectorPath" android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector> </aapt:attr> <target android:name="rotationGroup"> <aapt:attr name="android:animation"> <objectAnimator android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" android:duration="6000" android:interpolator="@android:interpolator/fast_out_slow_in" /> </aapt:attr> </target> </animated-vector>