天天看點

第二十二章:動畫(四)

相對動畫

後續點選問題的一個解決方案是使用RelRotateTo(“relative rotate to”),它擷取動畫開始的目前Rotation屬性,然後将其參數添加到動畫結束的該值。 這是一個例子:

void OnButtonClicked(object sender, EventArgs args)
{
    button.RelRotateTo(90, 1000);
}           

每次點選都會啟動一個動畫,在一秒鐘内将按鈕旋轉90度。 如果您在動畫正在進行時碰巧按下按鈕,則會從該位置開始播放新動畫,是以它可能會在不是90度增量的位置結束。 多次點選時速度沒有變化,因為動畫總是以每秒90度的速度運作。

RotateTo和RelRotateTo都有一個共同的底層結構。 在動畫過程中,計算一個值 - 通常稱為t(表示時間),有時稱為進度。 此值基于已用時間和動畫的持續時間:

𝑡 = 𝑒𝑙𝑎𝑝𝑠𝑒𝑑𝑇𝑖𝑚𝑒 / 𝑑𝑢𝑟𝑎𝑡𝑖𝑜           

t的值的範圍從動畫開始時的0到動畫結束時的1。 動畫也由兩個值(通常是屬性的值)定義,一個用于動畫的開始,一個用于結束。 這些通常稱為起始值和結束值,或者來自和來自值。 動畫根據簡單的插值公式計算from和to之間的值:

𝑣𝑎𝑙𝑢𝑒 = 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒 + 𝑡 ∙ (𝑡𝑜𝑉𝑎𝑙𝑢𝑒 − 𝑓𝑟𝑜𝑚𝑉𝑎𝑙𝑢𝑒)           

當t等于0時,value等于fromValue,當t等于1時,value等于toValue。

RotateTo和RelRotateTo都在調用方法時從Rotation prop erty的目前值擷取fromValue。 RotateTo将toValue設定為等于其參數,而RelRotateTo将toValue設定為等于fromValue及其參數。

繼續閱讀