Easing Functions in Xamarin.Forms
Xamarin.Forms Zawiera klasę Easing, która umożliwia określenie funkcji transferu, która kontroluje szybkość lub spowolnienie animacji podczas ich uruchamiania. W tym artykule pokazano, jak korzystać ze wstępnie zdefiniowanych funkcji ułatwiania i jak tworzyć niestandardowe funkcje złagodzenia.
Klasa Easing
definiuje szereg funkcji złagodzenia, które mogą być używane przez animacje:
- Funkcja
BounceIn
złagodzenia odbija animację na początku. - Funkcja
BounceOut
złagodzenia odbija animację na końcu. - Funkcja
CubicIn
złagodzenia powoli przyspiesza animację. - Funkcja
CubicInOut
złagodzenia przyspiesza animację na początku i zwalnia animację na końcu. - Funkcja
CubicOut
złagodzenia szybko zwalnia animację. - Funkcja
Linear
złagodzenia używa stałej prędkości i jest domyślną funkcją złagodzenia. - Funkcja
SinIn
złagodzenia płynnie przyspiesza animację. - Funkcja
SinInOut
złagodzenia płynnie przyspiesza animację na początku i płynnie zwalnia animację na końcu. - Funkcja
SinOut
złagodzenia płynnie zwalnia animację. - Funkcja złagodzenia powoduje, że animacja
SpringIn
bardzo szybko przyspiesza w kierunku końca. - Funkcja złagodzenia powoduje, że animacja
SpringOut
szybko zwalnia się na końcu.
Sufiksy In
i Out
wskazują, czy efekt zapewniany przez funkcję złagodzenia jest zauważalny na początku animacji, na końcu lub na obu.
Ponadto można tworzyć niestandardowe funkcje luzowania. Aby uzyskać więcej informacji, zobacz Custom Easing Functions (Niestandardowe funkcje easing).
Korzystanie z funkcji easing
Metody rozszerzenia animacji w ViewExtensions
klasie umożliwiają określenie funkcji złagodzenia jako końcowego parametru metody, jak pokazano w poniższym przykładzie kodu:
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);
Określając funkcję złagodzenia animacji, szybkość animacji staje się nieliniowa i daje efekt zapewniany przez funkcję złagodzenia. Pominięcie funkcji złagodzenia podczas tworzenia animacji powoduje, że animacja używa domyślnej Linear
funkcji złagodzenia, która generuje szybkość liniową.
Uwaga
Xamarin.Forms 5.0 zawiera konwerter typów, który konwertuje reprezentację ciągu funkcji złagodzenia na odpowiedni Easing
element członkowski wyliczenia. Ten konwerter typów jest automatycznie wywoływany we wszystkich właściwościach typu Easing
ustawionych w języku XAML.
Aby uzyskać więcej informacji na temat używania metod rozszerzenia animacji w ViewExtensions
klasie, zobacz Simple Animations (Proste animacje). Funkcje easing mogą być również używane przez klasę Animation
. Aby uzyskać więcej informacji, zobacz Animacje niestandardowe.
Niestandardowe funkcje easing
Istnieją trzy główne podejścia do tworzenia niestandardowej funkcji złagodzenia:
- Utwórz metodę
double
, która przyjmuje argument i zwracadouble
wynik. - Utwórz element
Func<double, double>
. - Określ funkcję easing jako argument konstruktora
Easing
.
We wszystkich trzech przypadkach niestandardowa funkcja luzowania powinna zwrócić wartość 0 dla argumentu 0 i 1 dla argumentu 1. Można jednak zwrócić dowolną wartość między wartościami argumentu 0 i 1. Każde podejście zostanie omówione z kolei.
Niestandardowa metoda easing
Niestandardową funkcję złagodzenia można zdefiniować jako metodę double
, która przyjmuje argument i zwraca double
wynik, jak pokazano w poniższym przykładzie kodu:
double CustomEase (double t)
{
return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
Metoda CustomEase
obcina wartość przychodzącą do wartości 0, 0.2, 0.4, 0.6, 0.8 i 1. W związku z tym Image
wystąpienie jest tłumaczone w dyskretnych skokach, a nie płynnie.
Niestandardowa funkcja func ułatwiania
Niestandardową funkcję złagodzenia można również zdefiniować jako Func<double, double>
funkcję , jak pokazano w poniższym przykładzie kodu:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
Reprezentuje CustomEaseFunc
funkcję złagodzenia, która zaczyna się szybko, spowalnia i odwraca kurs, a następnie odwraca kurs ponownie, aby szybko przyspieszyć w kierunku końca. W związku z tym, podczas gdy ogólny ruch Image
wystąpienia jest w dół, również tymczasowo odwraca kurs w połowie animacji.
Niestandardowy konstruktor easing
Niestandardową funkcję złagodzenia można również zdefiniować jako argument Easing
konstruktora, jak pokazano w poniższym przykładzie kodu:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
Niestandardowa funkcja luzowania jest określana jako argument Easing
funkcji lambda konstruktora i używa Math.Cos
metody do utworzenia wolnego efektu upuszczania, który jest tłumiony przez metodę Math.Exp
. W związku z tym wystąpienie jest tłumaczone tak, aby wydawało się, Image
że spadnie do końcowego miejsca spoczynku.
Podsumowanie
W tym artykule pokazano, jak korzystać ze wstępnie zdefiniowanych funkcji ułatwiania i jak tworzyć niestandardowe funkcje złagodzenia. Xamarin.Forms Zawiera klasę Easing
, która umożliwia określenie funkcji transferu, która kontroluje szybkość lub spowolnienie animacji podczas ich uruchamiania.