Beschleunigungsfunktionen in Xamarin.Forms
Xamarin.Forms enthält eine Easing-Klasse, mit der Sie eine Übertragungsfunktion angeben können, die steuert, wie Animationen während der Ausführung beschleunigen oder verlangsamen. In diesem Artikel wird veranschaulicht, wie Sie die vordefinierten Beschleunigungsfunktionen nutzen und benutzerdefinierte Beschleunigungsfunktionen erstellen.
Die Easing
-Klasse definiert eine Reihe von Easingfunktionen, die von Animationen genutzt werden können:
- Die
BounceIn
-Easingfunktion lässt die Animation am Anfang abprallen. - Die
BounceOut
-Easingfunktion lässt die Animation am Ende abprallen. - Die
CubicIn
-Easingfunktion beschleunigt die Animation langsam. - Die
CubicInOut
-Easingfunktion beschleunigt die Animation am Anfang und verzögert die Animation am Ende. - Die
CubicOut
-Easingfunktion verzögert die Animation schnell. - Die
Linear
-Easingfunktion verwendet eine konstante Geschwindigkeit und ist die standardmäßige Easingfunktion. - Die
SinIn
-Easingfunktion beschleunigt die Animation reibungslos. - Die
SinInOut
-Easingfunktion beschleunigt die Animation am Anfang reibungslos und verzögert die Animation am Ende reibungslos. - Die
SinOut
-Easingfunktion verzögert die Animation reibungslos. - Die
SpringIn
-Easingfunktion bewirkt, dass die Animation zum Ende hin sehr schnell beschleunigt wird. - Die
SpringOut
-Easingfunktion bewirkt, dass die Animation zum Ende hin schnell verzögert wird.
Die In
und Out
-Suffixe geben an, ob der von der Easingfunktion erzeugt Effekt am Anfang der Animation, am Ende oder in beiden Fällen bemerkbar ist.
Darüber hinaus können benutzerdefinierte Easingfunktionen erstellt werden. Weitere Informationen finden Sie unter Benutzerdefinierte Beschleunigungsfunktionen.
Verwenden einer Beschleunigungsfunktion
Mit den Animationserweiterungsmethoden in der ViewExtensions
Klasse kann eine Beschleunigungsfunktion als endgültiger Methodenparameter angegeben werden, wie im folgenden Codebeispiel veranschaulicht:
await image.TranslateTo(0, 200, 2000, Easing.BounceIn);
await image.ScaleTo(2, 2000, Easing.CubicIn);
await image.RotateTo(360, 2000, Easing.SinInOut);
await image.ScaleTo(1, 2000, Easing.CubicOut);
await image.TranslateTo(0, -200, 2000, Easing.BounceOut);
Durch die Angabe einer Easingfunktion für eine Animation wird die Animationsgeschwindigkeit nicht linear und erzeugt den Effekt, der von der Easingfunktion vorgesehen ist. Wenn beim Erstellen einer Animation eine Easingfunktion weggelassen wird, wird die Animation mit der standardmäßigen Linear
Easingfunktion verwendet, die eine lineare Geschwindigkeit erzeugt.
Hinweis
Xamarin.Forms 5.0 enthält einen Typkonverter, der eine Zeichenfolgendarstellung einer Beschleunigungsfunktion in das entsprechende Easing
Enumerationselement konvertiert. Dieser Typkonverter wird automatisch für alle Eigenschaften des Typs Easing
aufgerufen, die in XAML festgelegt sind.
Weitere Informationen zur Verwendung der Animationserweiterungsmethoden in der ViewExtensions
Klasse finden Sie unter "Einfache Animationen". Easingfunktionen können auch von der Animation
-Klasse genutzt werden. Weitere Informationen finden Sie unter "Benutzerdefinierte Animationen".
Benutzerdefinierte Beschleunigungsfunktionen
Es gibt drei Standardansätze zum Erstellen einer benutzerdefinierten Easingfunktion:
- Erstellen Sie eine Methode, die ein
double
-Argument verwendet, und eindouble
Ergebnis liefert. - Erstellen Sie eine
Func<double, double>
. - Geben Sie die Easingfunktion als Argument für den
Easing
-Konstruktor an.
In allen drei Fällen sollte die benutzerdefinierte Beschleunigungsfunktion 0 für ein Argument von 0 und 1 für ein Argument von 1 zurückgeben. Ein beliebiger Wert kann jedoch zwischen den Argumentwerten 0 und 1 zurückgegeben werden. Jeder Ansatz wird nun wiederum diskutiert.
Benutzerdefinierte Easing-Methode
Eine benutzerdefinierte Beschleunigungsfunktion kann als Methode definiert werden, die ein double
Argument verwendet und ein double
Ergebnis zurückgibt, wie im folgenden Codebeispiel veranschaulicht:
double CustomEase (double t)
{
return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
Die CustomEase
Methode schneidet den eingehenden Wert auf die Werte 0, 0,2, 0,4, 0,6, 0,8 und 1 ab. Daher wird die Image
-Instanz in separaten Sprüngen und nicht reibungslos übersetzt.
Benutzerdefinierter Beschleunigungs-Func
Eine benutzerdefinierte Beschleunigungsfunktion kann auch wie im folgenden Codebeispiel veranschaulicht als eine Func<double, double>
definiert werden:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
Dies CustomEaseFunc
stellt eine Beschleunigungsfunktion dar, die schnell startet, den Kurs verlangsamt und umgekehrt und dann den Kurs wieder umkehrt, um schnell zum Ende zu beschleunigen. Während die Gesamtbewegung der Image
-Instanz also nach unten gerichtet ist, kehrt sie nach der Hälfte der Animation vorübergehend ihren Kurs um.
Benutzerdefinierter Beschleunigungskonstruktor
Eine benutzerdefinierte Beschleunigungsfunktion kann auch als Argument für den Easing
Konstruktor definiert werden, wie im folgenden Codebeispiel veranschaulicht:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
Die benutzerdefinierte Beschleunigungsfunktion wird als Lambda-Funktionsargument für den Easing
Konstruktor angegeben und verwendet die Math.Cos
Methode, um einen langsamen Drop-Effekt zu erstellen, der von der Math.Exp
Methode gedämpft wird. Daher wird die Image
Instanz übersetzt, damit sie an den endgültigen Ruheort fällt.
Zusammenfassung
In diesem Artikel wurde erläutert, wie Sie die vordefinierten Beschleunigungsfunktionen nutzen und benutzerdefinierte Beschleunigungsfunktionen erstellen. Xamarin.Forms enthält eine Easing
Klasse, mit der Sie eine Übertragungsfunktion angeben können, mit der gesteuert wird, wie Animationen die Ausführung beschleunigen oder verlangsamen.