Упрощение функций в 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
. Дополнительные сведения см. в разделе "Пользовательские анимации".
Пользовательские функции упрощения
Существует три основных подхода к созданию пользовательской функции упрощения.
- Создайте метод, который принимает
double
аргумент и возвращаетdouble
результат. - Создайте
Func<double, double>
. - Укажите функцию упрощения в качестве аргумента конструктора
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
включает в себя класс, позволяющий указать функцию передачи, которая определяет, как анимация ускоряется или замедляется при выполнении.