Verwenden der VectorDrawable-Klasse von Android

Einführung

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.

1. Einen Vektor zeichnen lassen

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:

  • ein Quadrat für das CPU-Gehäuse, das aus zwei Bögen besteht
  • vier Gruppen von fünf Zeilen, die die Drähte der CPU darstellen

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.

2. Animieren von Vektorzeichnungen

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.

3. Vector Drawables umwandeln

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 Anwesensist 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 (); 

Fazit

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.