Implementierung der Animation in React Native

Eine Übersetzung des Artikels wurde speziell für Studenten des ReactJS / React Native-Developer- Kurses erstellt.




Eine mobile Anwendung ohne Animation ist kaum vorstellbar. Animationen im Web sind normalerweise einfach, wenn sie überhaupt existieren (maximal - eine Seite ersetzt eine andere). Animationen in mobilen Anwendungen erfordern eine völlig andere Aufmerksamkeit.

CSS3 verfügt über eine relativ einfache API, mit der Sie einfache Animationen erstellen können. In React Native verfügen Sie jedoch nicht über dieses Tool. Ja, selbst wenn es so wäre, würde es nicht ausreichen.

Was müssen Sie also wissen, wenn Sie mit React Native arbeiten und vollwertige Animationen implementieren müssen?

React Native hat ein Tool wie Animated, aber es sieht einschüchternd aus ... zumindest auf den ersten Blick.

Wenn Sie möchten, gibt es also drei „Gruppen von Dingen“ oder „Blöcke“, die Sie kennen müssen, um mit Animationen arbeiten zu können.

Block 0: Das Bedürfnis nach Veränderung


Animationen sind ein Wechsel von einem Zustand in einen anderen:

  • Übergang von "versteckt" zu "sichtbar";
  • Übergang von einem Kreis zu einem Quadrat.

Überlegen Sie, was vor und nach der Animation angezeigt werden soll.
Überlegen Sie sich Übergänge und welche Stile Sie dafür ändern müssen:

  • Sollte das Objekt mit einer Änderung der Transparenz erscheinen oder sollte es nur von oben „fallen“?
  • Sollte sich der Kreis nur in ein Quadrat verwandeln oder sollte er mitten im Prozess zu einem Dreieck werden?


Block 1: Ein visueller Status, der als Animated.Value


Aus logischer Sicht kann jede Komponente entweder angezeigt oder ausgeblendet werden - dies sind die Bedeutungen von „wahr“ und „falsch“, hier gibt es keinen Mittelweg. Als Status wird angezeigt, ob das Objekt als wahr oder falsch angezeigt wird.

In einer guten Benutzeroberfläche verstecken sich Objekte nicht plötzlich und erscheinen auch nicht plötzlich. Sie werden nach und nach angezeigt und helfen dem Benutzer, die Benutzeroberfläche zu verstehen.
Somit wird klar, dass der visuelle Zustand etwas zwischen einem wahren Zustand und einem falschen Zustand sein kann.

Wie so?
Wir können eine weitere Variable einführen, um eine Reihe von visuellen Zuständen darzustellen. Wir brauchen, dass dies eine Zahl ist, denn egal welchen logischen Zustand wir haben, Zahlen helfen uns, Zwischenwerte darzustellen.

 this._shown = new Animated.Value(0); 


Während ein logischer Zustand binär sein kann (d. H. Entweder true oder false , 1 oder 0), ist der visuelle Zustand eine Gleitkommazahl.

Block 2: Übergänge, bekannt als Animated.timing


Angenommen, eine Komponente ist ausgeblendet: Dies bedeutet, dass der logische Status ihrer Sichtbarkeitsparameter falsch und der visuelle Status ebenfalls 0,0 ist. Aber was passiert, wenn wir eine Komponente zeigen wollen? Der logische Zustand sollte sofort wahr werden, während der visuelle Zustand allmählich zuerst bei 0,1, 0,2, ... und schließlich vollständig bei 1,0 vergehen sollte.

Dazu benötigen wir eine Möglichkeit, dem visuellen Zustand den Übergang zu 1.0 mitzuteilen.
Und es gibt solche Wege. In der Tat gibt es sogar einige.
Der einfachste Weg ist im Grunde:

 Animated.timing(this._shown, { toValue: 1, duration: 300, }).start(); 


Hier sagen wir Animated , um _shown im Intervall von 300 ms auf 1.0 zu ändern.
Es gibt andere Übergänge und Möglichkeiten, mehrere Übergänge zu organisieren, aber jetzt können wir Animated.timing .

Block 3: Als Animated.View bekannte Pixel. Animated.View und interpolate


Unsere _shown Übergänge zwischen 0.0 und 1.0 bedeuten nichts, wenn wir sie nicht sehen können. Wie machen wir das?

Wir müssen irgendwie _shown , um die Transparenz der _shown Komponente _shown .

Angenommen, wir hatten diesen Code, bevor wir mit der Arbeit mit Animationen begannen:

 <View style={{ opacity: this.state.shown ? 1 : 0 }}> <SomeComponent /> </View> 


Wir setzen die Transparenz auf 0 wenn wir die Komponente ausblenden, und auf 1 wenn wir sie anzeigen.

Können wir den vorhandenen Animated.Value und _shown , um den Übergang von 0 nach 1 zu animieren?

Stilanimation


Wir können jeden Animated.Value wenn wir mit Stilen arbeiten.
Wir müssen nur die View in Animated.View ändern, und jetzt haben wir Folgendes:

 const opacity = this._shown; // This is an Animated.Value <Animated.View style={{ opacity: opacity }}> <SomeComponent /> </Animated.View> 


Ist das nicht ein Artikel über Animationen? Warum gibt es noch keine Bilder?



Noch etwas: Interpolation


Dieses Wort klingt beängstigend, aber die Idee selbst ist recht einfach. Die Interpolation ermöglicht es uns, einen visuellen Zustand innerhalb von 0 und 1 beizubehalten, aber die Möglichkeit zu geben, mit etwas anderem „übereinzustimmen“.

Angenommen, anstatt nur eine geerbte Komponente zu erstellen, möchten wir, dass unsere Komponente "von oben herausfällt". Und wir können dies tun, indem wir die verborgene Komponente 40px höher platzieren und ihre Bewegung an die gewünschte Position animieren, wenn der Status sichtbar wird.

Wir können unsere Werte von 0 bis 1 mit Werten von -40 bis 0 mit dem üblichen interpolate abgleichen“:

 const top = this._shown.interpolate({ inputRange: [0, 1], outputRange: [-40, 0], }); 


Dadurch wird ein neuer Animated.Value , dessen Wert zwischen -40 und 0 liegt.
Mit anderen Worten, es ist -40 wenn _shown 0 , -20 wenn _shown = 0.5 und 0 wenn _shown 1.0 .



Dunkles Geheimnis: Mit interpolate Sie auch Werte für Farben und Grade ändern.

Schlussfolgerungen:


  • Der visuelle Zustand ist ein numerischer Wert, er sollte den Übergang von einem Stil zu einem anderen widerspiegeln.
  • Animated.Value können Sie den numerischen Wert des visuellen Status wiedergeben.
  • Animated.timing kann verwendet werden, um Animated.Value auf eine andere Zahl zu verschieben.
  • Animated.Value kann für Stile verwendet werden, wenn View durch Animated.View .

Mit der Interpolation können Sie einen Animated.Value Bereich einem anderen Animated.Value , z. B. einem Bereich von 0 bis 1 bis zu einem Bereich von 5 bis 25 oder sogar einem Bereich zwischen Schwarz und Grün.

Quellen:


In diesem Artikel haben wir uns mit den Grundelementen der Animation in React Native getroffen und ein Verständnis für die Grundidee gewonnen. Hier finden Sie Ressourcen, mit denen Sie dieses Thema genauer untersuchen können:

Source: https://habr.com/ru/post/de468851/


All Articles