Während Android SVGs (Scalable Vector Graphics) nicht direkt unterstützt, hat Lollipop eine neue Klasse eingeführt VectorDrawable
, So können Designer und Entwickler Assets auf ähnliche Weise nur mit Code zeichnen.
In diesem Artikel erfahren Sie, wie Sie eine erstellen VectorDrawable
mit XML-Dateien und animieren Sie diese in Ihren Projekten. Dies wird nur für Geräte unterstützt, auf denen Android 5.0 oder höher ausgeführt wird. Derzeit gibt es keine Unterstützungsbibliothekimplementierungen. Die Quelldateien dieses Tutorials finden Sie auf GitHub.
Die Hauptähnlichkeit zwischen a VectorDrawable
und ein Standard-SVG-Bild ist, dass beide mit a gezeichnet werden Pfad Wert. Während Sie verstehen, wie SVG-PfadeWenn der Inhalt dieses Artikels nicht angegeben ist, finden Sie offizielle Dokumentation auf der W3C-Website. Für diesen Artikel müssen Sie lediglich wissen, dass das Pfad-Tag der Ort ist, an dem die Zeichnung erfolgt. Schauen wir uns die SVG-Datei an, die das folgende Bild zeichnet:
Dieses Bild besteht aus fünf Hauptteilen:
Der folgende Code zeichnet dieses Bild als SVG aus:
Während dies ein wenig überwältigend aussehen mag, müssen Sie nicht wirklich verstehen, wie alles für die Implementierung eines Systems erstellt wird VectorDrawable
in Ihrem Code. Es sollte jedoch beachtet werden, dass ich jeden der fünf Abschnitte in einen eigenen eindeutigen Block im Code zur besseren Lesbarkeit unterteilt habe.
Der obere Abschnitt besteht aus zwei Bögen, um das abgerundete Quadrat hervorzuheben, und die folgenden Abschnitte repräsentieren die unteren, oberen, rechten und linken Liniensätze. Um diesen SVG-Code in einen VectorDrawable
, Sie müssen zuerst das definieren Vektor
Objekt in XML. Der folgende Code stammt aus dem vector_drawable_cpu.xml Datei im Beispielcode für diesen Artikel.
Als nächstes können Sie die Pfaddaten hinzufügen. Der folgende Code ist in fünf verschiedene Pfad-Tags und nicht in einen großen Pfad unterteilt.
Wie Sie sehen, verwendet jeder Pfadabschnitt einfach die pathData
Attribut zum Zeichnen. Sie können jetzt die VectorDrawable
XML-Datei als Zeichnung in einem Standard Bildansicht
Es lässt sich auf jede beliebige Größe skalieren, die Ihre App benötigt, ohne dass Java-Code verwendet werden muss.
Jetzt wissen Sie, wie Sie Bilder nur mit Code erstellen. Jetzt ist es an der Zeit, ein wenig Spaß zu haben und sie zu animieren. In der folgenden Animation werden Sie feststellen, dass jede der Drahtgruppen zur CPU hin und von ihr weg pulsiert.
Um diesen Effekt zu erzielen, müssen Sie jeden Abschnitt, den Sie animieren möchten, in ein einschließen
Etikett. Die aktualisierte Version von vector_drawable_cpu.xml dann sieht es so aus:
Als Nächstes möchten Sie erstellen Animatoren für jeden Animationstyp. In diesem Fall gibt es für jede Drahtgruppe eine für insgesamt vier. Unten finden Sie ein Beispiel für die Animation der oberen Gruppe. Sie benötigen auch eine für die untere, linke und rechte. Jede der Animator-XML-Dateien befindet sich im Beispielcode.
Wie Sie sehen können, die Name des Anwesens
ist eingestellt auf translateY
, Dies bedeutet, dass sich die Animation entlang der Y-Achse bewegt. Das valueFrom
und valueTo
steuere den Anfangs- und Endort. Indem man es einstellt Wiederholungsmodus
zu umkehren
und repeatCount
zu unendlich
, Die Animation wird für immer so lange wiederholt wie VectorDrawable
ist sichtbar. Das Dauer
der Animation ist auf gesetzt 250
, Das ist die Zeit in Millisekunden.
Um die Animationen auf Ihre Zeichnungsdatei anzuwenden, müssen Sie eine neue erstellen animierter Vektor
XML-Datei zum Verknüpfen der Animatoren mit der VectorDrawable
Gruppen. Der folgende Code wird zum Erstellen des verwendet animated_cpu.xml Datei.
Wenn alle XML-Dateien einsatzbereit sind, können Sie sie verwenden das animated_cpu.xmlzeichnen in einem Bildansicht
um es anzuzeigen.
Um Ihre Animation zu starten, benötigen Sie eine Instanz von Animierbar
von dem Bildansicht
und Ruf an Start
.
ImageView mCpuImageView = (ImageView) findViewById (R.id.cpu); Drawable drawable = mCpuImageView.getDrawable (); if (drawable Instanz von Animatable) ((Animatable) drawable) .start ();
Nach dem Start
aufgerufen wurde, bewegen sich die Drähte auf dem CPU-Image mit sehr wenig Java-Code.
Ein häufiger Anwendungsfall für a VectorDrawable
verwandelt ein Bild in ein anderes, z. B. das Aktionsbalkensymbol, das sich von einem Hamburger-Symbol in einen Pfeil ändert. Dazu müssen der Quell- und der Zielpfad für die Anzahl der Elemente ein identisches Format aufweisen. In diesem Beispiel definieren wir die nach links und rechts gerichteten Pfeile als Strings.
M300,70 l 0,70 -70, -70 0,070, -70z M300,70 l 0, -70 70,70 0,0 -70,70z
Als Nächstes müssen Sie mit dem Pfad für einen Pfeil ein anfängliches Zeichen für einen Pfeil erstellen linker Pfeil. Im Beispielcode wird es aufgerufen vector_drawable_left_arrow.xml.
Der Hauptunterschied zwischen der CPU - Animation und der Transformation liegt in der animator_left_right_arrow.xml Datei.
Sie werden das bemerken valueFrom
und valueTo
Eigenschaften verweisen auf die Pfaddaten für den linken und rechten Pfeil, den Werttyp
ist eingestellt auf pathType
und Name des Anwesens
ist eingestellt auf pathData
. Wenn diese festgelegt sind, weiß der Animator, dass er einen Satz von Pfaddaten in den anderen ändern soll. Wenn der Animator fertig ist, müssen Sie die VectorDrawable
mit dem objectAnimator
mit einem neuen animierter Vektor
Objekt.
Schließlich müssen Sie das animierte Zeichenelement einfach mit einem verknüpfen Bildansicht
und starten Sie die Animation in Ihrem Java-Code.
mArrowImageView = (ImageView) findViewById (R.id.left_right_arrow); drawable = mArrowImageView.getDrawable (); if (drawable Instanz von Animatable) ((Animatable) drawable) .start ();
Wie Sie gesehen haben, die VectorDrawable
Diese Klasse ist ziemlich einfach zu bedienen und erlaubt eine große Anzahl von Anpassungen, um einfache Animationen hinzuzufügen. Während VectorDrawable
Diese Klasse ist derzeit nur für Geräte mit Android 5.0 und höher verfügbar. Sie werden von unschätzbarem Wert sein, da weitere Geräte Lollipop und zukünftige Android-Versionen unterstützen.