Beschleunigungsfunktionen in Xamarin.Forms
Xamarin.Forms enthält eine Easing-Klasse, mit der Sie eine Übertragungsfunktion angeben können, die steuert, wie Animationen bei der Ausführung beschleunigt oder verlangsamt werden. In diesem Artikel wird veranschaulicht, wie Sie die vordefinierten Beschleunigungsfunktionen nutzen und benutzerdefinierte Beschleunigungsfunktionen erstellen.
Die Easing
-Klasse definiert eine Reihe von Beschleunigungsfunktionen, die von Animationen verwendet werden können:
- Die
BounceIn
Beschleunigungsfunktion springt die Animation am Anfang. - Die
BounceOut
Beschleunigungsfunktion springt die Animation am Ende. - Die
CubicIn
Beschleunigungsfunktion beschleunigt die Animation langsam. - Die
CubicInOut
Beschleunigungsfunktion beschleunigt die Animation am Anfang und verlangsamt die Animation am Ende. - Die
CubicOut
Beschleunigungsfunktion verlangsamt die Animation schnell. - Die
Linear
Beschleunigungsfunktion verwendet eine konstante Geschwindigkeit und ist die Standardfunktion zur Beschleunigung. - Die
SinIn
Beschleunigungsfunktion beschleunigt die Animation reibungslos. - Die
SinInOut
Beschleunigungsfunktion beschleunigt die Animation am Anfang reibungslos und verlangsamt die Animation am Ende reibungslos. - Die
SinOut
Beschleunigungsfunktion verlangsamt die Animation reibungslos. - Die
SpringIn
Beschleunigungsfunktion bewirkt, dass die Animation sehr schnell gegen Ende beschleunigt wird. - Die
SpringOut
Beschleunigungsfunktion bewirkt, dass die Animation gegen Ende schnell verlangsamt wird.
Die In
Suffixe und Out
geben an, ob der von der Beschleunigungsfunktion bereitgestellte Effekt am Anfang der Animation, am Ende oder beidem spürbar ist.
Darüber hinaus können benutzerdefinierte Beschleunigungsfunktionen erstellt werden. Weitere Informationen finden Sie unter Benutzerdefinierte Beschleunigungsfunktionen.
Verwenden einer Beschleunigungsfunktion
Die Animationserweiterungsmethoden in der ViewExtensions
-Klasse ermöglichen es, eine Beschleunigungsfunktion als endgültigen Methodenparameter anzugeben, 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 Angeben einer Beschleunigungsfunktion für eine Animation wird die Animationsgeschwindigkeit nichtlinear und erzeugt den Effekt, der von der Beschleunigungsfunktion bereitgestellt wird. Wenn Sie beim Erstellen einer Animation eine Beschleunigungsfunktion weglassen, verwendet die Animation die Standardmäßige Linear
Beschleunigungsfunktion, die eine lineare Geschwindigkeit erzeugt.
Hinweis
Xamarin.Forms 5.0 enthält einen Typkonverter, der eine Zeichenfolgendarstellung einer Beschleunigungsfunktion in den entsprechenden Easing
Enumerationsmember 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. Beschleunigungsfunktionen können auch von der Animation
-Klasse genutzt werden. Weitere Informationen finden Sie unter Benutzerdefinierte Animationen.
Benutzerdefinierte Beschleunigungsfunktionen
Es gibt drei Standard Ansätze zum Erstellen einer benutzerdefinierten Beschleunigungsfunktion:
- Erstellen Sie eine Methode, die ein
double
Argument akzeptiert und eindouble
Ergebnis zurückgibt. - Erstellen Sie eine
Func<double, double>
. - Geben Sie die Beschleunigungsfunktion 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. Es kann jedoch jeder Wert zwischen den Argumentwerten 0 und 1 zurückgegeben werden. Jeder Ansatz wird nun nacheinander besprochen.
Benutzerdefinierte Easing-Methode
Eine benutzerdefinierte Beschleunigungsfunktion kann als Methode definiert werden, die ein double
Argument akzeptiert 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
instance in diskreten Sprüngen übersetzt, anstatt reibungslos.
Benutzerdefinierter Beschleunigungs-Func
Eine benutzerdefinierte Beschleunigungsfunktion kann auch als Func<double, double>
definiert werden, wie im folgenden Codebeispiel veranschaulicht:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
CustomEaseFunc
stellt eine Beschleunigungsfunktion dar, die schnell startet, den Kurs verlangsamt und umgekehrt und dann den Kurs wieder umkehrt, um schnell gegen Ende zu beschleunigen. Während die Gesamtbewegung des Image
instance also nach unten geht, kehrt er vorübergehend den Kurs in der Mitte der Animation 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 Lambdafunktionsargument für den Easing
Konstruktor angegeben und verwendet die Math.Cos
-Methode, um einen Langsam-Drop-Effekt zu erzeugen, der durch die Math.Exp
-Methode gedämpft wird. Daher wird die Image
instance übersetzt, sodass sie an ihren letzten Ruheplatz fallen scheint.
Zusammenfassung
In diesem Artikel wurde veranschaulicht, 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, die steuert, wie Animationen bei der Ausführung beschleunigt oder verlangsamt werden.