Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Xamarin.Forms incluye una clase Aceleración que permite especificar una función de transferencia que controla cómo se aceleran o ralentizan las animaciones a medida que se ejecutan. En este artículo se muestra cómo consumir las funciones de aceleración predefinidas y cómo crear funciones de aceleración personalizadas.
La clase Easing define una serie de funciones de aceleración que las animaciones pueden consumir:
- La función de aceleración
BounceInrebota la animación al principio. - La función de aceleración
BounceOutrebota la animación al final. - La función de aceleración
CubicInacelera lentamente la animación. - La función de aceleración
CubicInOutacelera la animación al principio y ralentiza la animación al final. - La función de aceleración
CubicOutralentiza rápidamente la animación. - La función de aceleración
Linearusa una velocidad constante y es la función de aceleración predeterminada. - La función de aceleración
SinInacelera suavemente la animación. - La función de aceleración
SinInOutacelera suavemente la animación al principio y ralentiza suavemente la animación al final. - La función de aceleración
SinOutralentiza suavemente la animación. - La función de aceleración
SpringInhace que la animación se acelere muy rápidamente hacia el final. - La función de aceleración
SpringOuthace que la animación se desacelere rápidamente hacia el final.
Los sufijos In y Out indican si el efecto proporcionado por la función de aceleración es notable al principio de la animación, al final o ambos.
Además, se pueden crear funciones de aceleración personalizadas. Para obtener más información, consulte Funciones de aceleración personalizadas.
Uso de una función de aceleración
Los métodos de extensión de animación de la clase ViewExtensions permiten especificar una función de aceleración como parámetro de método final, como se muestra en el ejemplo de código siguiente:
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);
Al especificar una función de aceleración para una animación, la velocidad de animación se convierte en no lineal y genera el efecto proporcionado por la función de aceleración. Omitir una función de aceleración al crear una animación hace que la animación use la función de aceleración Linear predeterminada, que produce una velocidad lineal.
Nota:
Xamarin.Forms 5.0 incluye un convertidor de tipos que convierte una representación de cadena de una función de aceleración en el miembro de enumeración adecuado Easing. Este convertidor de tipos se invoca automáticamente en cualquier propiedad de tipo Easing que se establezca en XAML.
Para obtener más información sobre el uso de los métodos de extensión de animación en la clase ViewExtensions, vea Animaciones simples. La clase Animation también puede consumir funciones de aceleración. Para más información, consulte Animaciones personalizadas.
Funciones de aceleración personalizadas
Hay tres métodos principales para crear una función de aceleración personalizada:
- Crear un método que tome un argumento
doubley devuelva un resultadodouble. - Crear un control
Func<double, double>. - Especificar la función de aceleración como argumento para el constructor
Easing.
En los tres casos, la función de aceleración personalizada debe devolver 0 para un argumento de 0, y 1 para un argumento de 1. Sin embargo, se puede devolver cualquier valor entre los valores 0 y 1 del argumento. Ahora se analizará cada enfoque de uno en uno.
Método de aceleración personalizada
Una función de aceleración personalizada se puede definir como un método que toma un argumento double y devuelve un resultado double, como se muestra en el ejemplo de código siguiente:
double CustomEase (double t)
{
return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
El método CustomEase trunca el valor entrante en los valores 0, 0.2, 0.4, 0.6, 0.8 y 1. Por lo tanto, la instancia Image se traduce en saltos discretos, en lugar de suaves.
Función de aceleración personalizada
Una función de aceleración personalizada también se puede definir como un Func<double, double>, como se muestra en el ejemplo de código siguiente:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
El CustomEaseFunc representa una función de aceleración que comienza rápido, se ralentiza y invierte el curso y, a continuación, vuelve a invertir el curso para acelerar rápidamente hacia el final. Por lo tanto, mientras que el movimiento general de la instancia Image es hacia abajo, también invierte temporalmente el curso a mitad de la animación.
Constructor de aceleración personalizada
Una función de aceleración personalizada también se puede definir como el argumento para el constructor Easing, como se muestra en el ejemplo de código siguiente:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
La función de aceleración personalizada se especifica como un argumento de función lambda para el constructor Easing y usa el método Math.Cos para crear un efecto de caída lento que el método Math.Exp amortigua. Por lo tanto, la instancia Image se traslada para que parezca que se coloca en su lugar de descanso final.
Resumen
En este artículo se muestra cómo consumir las funciones de aceleración predefinidas y cómo crear funciones de aceleración personalizadas. Xamarin.Forms incluye una clase Easing que permite especificar una función de transferencia que controla cómo se aceleran o ralentizan las animaciones a medida que se ejecutan.