Funções de Atenuação em Xamarin.Forms
Xamarin.Forms inclui uma classe Easing que permite especificar uma função de transferência que controla como as animações aceleram ou desaceleram durante a execução. Este artigo demonstra como consumir as funções de easing predefinidas e como criar funções de easing personalizadas.
A Easing
classe define várias funções de easing que podem ser consumidas por animações:
- A
BounceIn
função de atenuação salta a animação no início. - A
BounceOut
função de atenuação salta a animação no final. - A
CubicIn
função de atenuação acelera lentamente a animação. - A
CubicInOut
função de atenuação acelera a animação no início e desacelera a animação no final. - A
CubicOut
função de atenuação desacelera rapidamente a animação. - A
Linear
função de easing usa uma velocidade constante e é a função de easing padrão. - A
SinIn
função de atenuação acelera suavemente a animação. - A
SinInOut
função de atenuação acelera suavemente a animação no início e desacelera suavemente a animação no final. - A
SinOut
função de atenuação desacelera suavemente a animação. - A
SpringIn
função de atenuação faz com que a animação acelere muito rapidamente no final. - A
SpringOut
função de atenuação faz com que a animação desacelere rapidamente no final.
Os In
sufixos e Out
indicam se o efeito fornecido pela função de atenuação é perceptível no início da animação, no final ou em ambos.
Além disso, funções de easing personalizadas podem ser criadas. Para obter mais informações, consulte Funções de easing personalizadas.
Consumindo uma função de atenuação
Os métodos de extensão de animação na ViewExtensions
classe permitem que uma função de easing seja especificada como o parâmetro final do método, conforme demonstrado no exemplo de código a seguir:
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);
Ao especificar uma função de atenuação para uma animação, a velocidade da animação se torna não linear e produz o efeito fornecido pela função de atenuação. Omitir uma função de atenuação ao criar uma animação faz com que a animação use a função de atenuação padrão Linear
, que produz uma velocidade linear.
Observação
Xamarin.Forms 5.0 inclui um conversor de tipo que converte uma representação de cadeia de caracteres de uma função de easing no membro de enumeração apropriado Easing
. Esse conversor de tipo é invocado automaticamente em todas as propriedades do tipo Easing
definidas em XAML.
Para obter mais informações sobre como usar os métodos de extensão de animação na ViewExtensions
classe, consulte Animações simples. As funções de easing também podem ser consumidas Animation
pela classe. Para obter mais informações, consulte Animações personalizadas.
Funções de easing personalizadas
Existem três abordagens principais para criar uma função de easing personalizada:
- Crie um método que receba um
double
argumento e retorne umdouble
resultado. - Crie um
Func<double, double>
. - Especifique a função de atenuação como o argumento para o
Easing
construtor.
Em todos os três casos, a função de easing personalizada deve retornar 0 para um argumento de 0 e 1 para um argumento de 1. No entanto, qualquer valor pode ser retornado entre os valores de argumento de 0 e 1. Cada abordagem será agora discutida sucessivamente.
Método de flexibilização personalizado
Uma função de easing personalizada pode ser definida como um método que usa um double
argumento e retorna um double
resultado, conforme demonstrado no exemplo de código a seguir:
double CustomEase (double t)
{
return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
O CustomEase
método trunca o valor de entrada para os valores 0, 0,2, 0,4, 0,6, 0,8 e 1. Portanto, a instância é traduzida Image
em saltos discretos, em vez de suavemente.
Função de Easing Personalizada
Uma função de easing personalizada também pode ser definida como , Func<double, double>
conforme demonstrado no exemplo de código a seguir:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
O CustomEaseFunc
representa uma função de atenuação que começa rápido, desacelera e inverte o curso e, em seguida, inverte o curso novamente para acelerar rapidamente no final. Portanto, embora o movimento geral da Image
instância seja para baixo, ele também inverte temporariamente o curso na metade da animação.
Construtor de easing personalizado
Uma função de easing personalizada também pode ser definida como o argumento para o Easing
construtor, conforme demonstrado no exemplo de código a seguir:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
A função de easing personalizada é especificada como um argumento de função lambda para o Easing
construtor e usa o Math.Cos
método para criar um efeito de queda lenta que é amortecido pelo Math.Exp
método. Portanto, a instância é traduzida Image
para que pareça cair em seu local de descanso final.
Resumo
Este artigo demonstrou como consumir as funções de easing predefinidas e como criar funções de easing personalizadas. Xamarin.Forms Inclui uma Easing
classe que permite especificar uma função de transferência que controla como as animações aceleram ou desaceleram enquanto estão em execução.