Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Xamarin.Forms include una classe Interpolazione che consente di specificare una funzione di trasferimento che controlla la velocità o il rallentamento delle animazioni durante l'esecuzione. Questo articolo illustra come usare le funzioni di interpolazione predefinite e come creare funzioni di interpolazione personalizzate.
La Easing classe definisce una serie di funzioni di interpolazione che possono essere utilizzate dalle animazioni:
- La
BounceInfunzione di interpolazione rimbalza l'animazione all'inizio. - La
BounceOutfunzione di interpolazione rimbalza l'animazione alla fine. - La
CubicInfunzione di interpolazione accelera lentamente l'animazione. - La
CubicInOutfunzione di interpolazione accelera l'animazione all'inizio e decelera l'animazione alla fine. - La
CubicOutfunzione di interpolazione rallenta rapidamente l'animazione. - La
Linearfunzione di interpolazione usa una velocità costante ed è la funzione di interpolazione predefinita. - La
SinInfunzione di interpolazione accelera senza problemi l'animazione. - La
SinInOutfunzione di interpolazione accelera senza problemi l'animazione all'inizio e rallenta senza problemi l'animazione alla fine. - La
SinOutfunzione di interpolazione decelera l'animazione senza problemi. - La
SpringInfunzione di interpolazione fa sì che l'animazione accelera molto rapidamente verso la fine. - La
SpringOutfunzione di interpolazione fa sì che l'animazione decelera rapidamente verso la fine.
I In suffissi e Out indicano se l'effetto fornito dalla funzione di interpolazione è evidente all'inizio dell'animazione, alla fine o a entrambi.
È anche possibile creare funzioni di interpolazione personalizzate. Per altre informazioni, vedere Funzioni di interpolazione personalizzate.
Utilizzo di una funzione di interpolazione
I metodi di estensione dell'animazione nella ViewExtensions classe consentono di specificare una funzione di interpolazione come parametro del metodo finale, come illustrato nell'esempio di codice seguente:
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);
Specificando una funzione di interpolazione per un'animazione, la velocità di animazione diventa non lineare e produce l'effetto fornito dalla funzione di interpolazione. Omettendo una funzione di interpolazione durante la creazione di un'animazione, l'animazione usa la funzione di interpolazione predefinita Linear , che produce una velocità lineare.
Nota
Xamarin.Forms 5.0 include un convertitore di tipi che converte una rappresentazione di stringa di una funzione di interpolazione nel membro di enumerazione appropriato Easing . Questo convertitore di tipi viene richiamato automaticamente su tutte le proprietà di tipo Easing impostate in XAML.
Per altre informazioni sull'uso dei metodi di estensione dell'animazione nella ViewExtensions classe , vedere Animazioni semplici. Le funzioni di interpolazione possono essere utilizzate anche dalla Animation classe . Per altre informazioni, vedere Animazioni personalizzate.
Funzioni di interpolazione personalizzate
Esistono tre approcci principali per la creazione di una funzione di interpolazione personalizzata:
- Creare un metodo che accetta un
doubleargomento e restituisce undoublerisultato. - Creare un oggetto
Func<double, double>. - Specificare la funzione di interpolazione come argomento per il
Easingcostruttore.
In tutti e tre i casi, la funzione di interpolazione personalizzata deve restituire 0 per un argomento pari a 0 e 1 per un argomento pari a 1. Tuttavia, qualsiasi valore può essere restituito tra i valori dell'argomento 0 e 1. Ogni approccio verrà ora discusso a sua volta.
Metodo di interpolazione personalizzato
Una funzione di interpolazione personalizzata può essere definita come un metodo che accetta un double argomento e restituisce un double risultato, come illustrato nell'esempio di codice seguente:
double CustomEase (double t)
{
return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
Il CustomEase metodo tronca il valore in ingresso ai valori 0, 0,2, 0,4, 0,6, 0,8 e 1. Pertanto, l'istanza Image viene convertita in salti discreti, anziché senza problemi.
Func interpolazione personalizzato
Una funzione di interpolazione personalizzata può essere definita anche come Func<double, double>, come illustrato nell'esempio di codice seguente:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
Rappresenta CustomEaseFunc una funzione di interpolazione che inizia veloce, rallenta e inverte il corso e quindi inverte di nuovo il corso per accelerare rapidamente verso la fine. Pertanto, mentre il movimento complessivo dell'istanza Image è verso il basso, anche temporaneamente inverte il corso a metà dell'animazione.
Costruttore di interpolazione personalizzato
Una funzione di interpolazione personalizzata può anche essere definita come argomento per il Easing costruttore, come illustrato nell'esempio di codice seguente:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
La funzione di interpolazione personalizzata viene specificata come argomento di funzione lambda per il Easing costruttore e usa il Math.Cos metodo per creare un effetto di rilascio lento che viene smorzato dal Math.Exp metodo . Pertanto, l'istanza Image viene convertita in modo da sembrare di cadere nel punto di riposo finale.
Riepilogo
Questo articolo ha illustrato come utilizzare le funzioni di interpolazione predefinite e come creare funzioni di interpolazione personalizzate. Xamarin.Forms include una Easing classe che consente di specificare una funzione di trasferimento che controlla la velocità o il rallentamento delle animazioni durante l'esecuzione.