Udostępnij za pośrednictwem


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:

  1. Utwórz metodę double , która przyjmuje argument i zwraca double wynik.
  2. Utwórz element Func<double, double>.
  3. 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.