Поделиться через


Упрощение функций в Xamarin.Forms

Xamarin.Forms включает класс Easing, который позволяет указать функцию передачи, которая определяет, как анимация ускоряется или замедляется при выполнении. В этой статье показано, как использовать предварительно определенные функции упрощения и как создавать пользовательские функции упрощения.

Класс Easing определяет ряд функций упрощения, которые можно использовать анимацией:

  • Функция BounceIn упрощения отскакивает анимацию в начале.
  • Функция BounceOut упрощения отскакивает анимацию в конце.
  • Функция CubicIn упрощения медленно ускоряет анимацию.
  • Функция CubicInOut упрощения ускоряет анимацию в начале и уменьшает анимацию в конце.
  • Функция CubicOut упрощения быстро уменьшает анимацию.
  • Функция Linear упрощения использует константную скорость и является функцией упрощения по умолчанию.
  • Функция SinIn упрощения плавно ускоряет анимацию.
  • Функция SinInOut упрощения плавно ускоряет анимацию в начале и плавно уменьшает анимацию в конце.
  • Функция SinOut упрощения плавно уменьшает анимацию.
  • Функция SpringIn упрощения приводит к тому, что анимация очень быстро ускоряется к концу.
  • Функция SpringOut упрощения приводит к быстрому замедлению анимации в конце.

И In Out суффиксы указывают, заметны ли эффект, предоставляемый функцией упрощения, в начале анимации, в конце или обоих.

Кроме того, можно создать пользовательские функции упрощения. Дополнительные сведения см. в разделе "Пользовательские функции упрощения".

Использование функции упрощения

Методы расширения анимации в классе позволяют указать функцию упрощения в ViewExtensions качестве конечного параметра метода, как показано в следующем примере кода:

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);

Указав функцию упрощения для анимации, скорость анимации становится нелинейной и создает эффект, предоставляемый функцией упрощения. Опущение функции упрощения при создании анимации приводит к тому, что анимация использует функцию упрощения по умолчанию Linear , которая создает линейную скорость.

Примечание.

Xamarin.Forms 5.0 включает преобразователь типов, который преобразует строковое представление функции упрощения в соответствующий Easing элемент перечисления. Этот преобразователь типов автоматически вызывается для любых свойств типа Easing , заданных в XAML.

Дополнительные сведения об использовании методов расширения анимации в классе см. в ViewExtensions разделе "Простые анимации". Функции упрощения также можно использовать классом Animation . Дополнительные сведения см. в разделе "Пользовательские анимации".

Пользовательские функции упрощения

Существует три основных подхода к созданию пользовательской функции упрощения.

  1. Создайте метод, который принимает double аргумент и возвращает double результат.
  2. Создайте Func<double, double>.
  3. Укажите функцию упрощения в качестве аргумента конструктора Easing .

Во всех трех случаях пользовательская функция упрощения должна возвращать 0 для аргумента 0 и 1 для аргумента 1. Однако любое значение можно вернуть между значениями аргументов 0 и 1. Теперь каждый подход будет обсуждаться в свою очередь.

Настраиваемый метод упрощения

Пользовательская функция упрощения может быть определена как метод, который принимает double аргумент и возвращает double результат, как показано в следующем примере кода:

double CustomEase (double t)
{
  return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}

await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);

Метод CustomEase усечение входящего значения до значений 0, 0,2, 0.4, 0.6, 0.8 и 1. Таким образом, Image экземпляр преобразуется в дискретные переходы, а не гладко.

Пользовательское упрощение Func

Пользовательская функция упрощения также может быть определена в качестве примера Func<double, double>кода, как показано в следующем примере кода:

Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);

Представляет CustomEaseFunc функцию упрощения, которая начинается быстро, замедляет и изменяет курс, а затем снова меняет курс, чтобы быстро ускориться к концу. Таким образом, в то время как общее перемещение экземпляра Image вниз, оно также временно изменяет курс на полпути анимации.

Настраиваемый конструктор упрощений

Пользовательская функция упрощения также может быть определена в качестве аргумента конструктора Easing , как показано в следующем примере кода:

await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));

Пользовательская функция упрощения указана в качестве лямбда-аргумента Easing функции конструктору и использует Math.Cos метод для создания медленного эффекта падения, который заглушен методом Math.Exp . Таким образом, экземпляр преобразуется таким образом, чтобы он, как представляется, Image падал в его окончательное место отдыха.

Итоги

В этой статье показано, как использовать предварительно определенные функции упрощения и как создавать пользовательские функции упрощения. Xamarin.FormsEasing включает в себя класс, позволяющий указать функцию передачи, которая определяет, как анимация ускоряется или замедляется при выполнении.