動態

詳情 返回 返回

一步一步學習使用FireMonkey動畫(5) 動畫圖解11種動畫插值類型 - 動態 詳情

如果學習過《一步一步學習使用FireMonkey動畫》系列的前幾課,可以看到不止一次的使用了動畫的Interpolation屬性指定插值。

插值(Interpolation),在數學和計算機圖形學中,是一種在兩個已知值之間估算中間值的方法。簡單來説,就是給定一個起點 A 和一個終點 B,插值能計算出從 A 到 B 的平滑過渡中的所有“中間點”。

一個生活中的例子:
假設你想從房間的左邊(位置 X=0)走到右邊(位置 X=100)。

起點 A: X = 0
終點 B: X = 100
時間: 10 秒

如果你不是瞬間移動過去的,那麼在第 1 秒、第 2 秒... 第 9 秒時,你會在某個中間位置。計算這些中間位置的過程就是插值。最簡單的插值是線性插值,即勻速運動:

第 1 秒:X = 10
第 2 秒:X = 20
...
第 5 秒:X = 50
第 10 秒:X = 100

這是讓動畫效果豐富多彩的關鍵。

FireMonkey 提供了多種插值函數,它們決定了數值變化的“緩動”效果(Easing)。

img

  • Linear(線性): 最簡單的插值,勻速變化。
    計算公式:Value = Start + (End - Start) * (CurrentTime / Duration)

  • Quadratic(二次方): 緩慢開始,然後加速(Ease In);或快速開始,然後減速(Ease Out)。

  • Cubic(三次方)、Quartic(四次方)、Quintic(五次方): 與二次方類似,但效果更強烈。

  • Sinusoidal(正弦曲線): 創建一個類似正弦波的平滑加速和減速。

  • Exponential(指數): 以指數方式變化,產生非常強烈的加速或減速效果。

  • Elastic(彈性): 在終點附近會有“回彈”效果,像一根橡皮筋。

  • Bounce(彈跳): 在終點處像球落地一樣彈跳幾下。

  • Back(回拉): 在開始運動前會先稍微向後(反向)運動一點。

這些類型通常都有 In, Out, InOut 三種模式,分別控制效果應用於動畫的開始、結束還是整個過程。這也是為動畫的AnimationType屬性指定的三種值的作用。

動畫圖解11種線性插值

説實話很難通過語言來介紹這種插值的效果,只有通過動畫才能加深印象,這裏使用了《Delphi GUI Programming with FireMonkey》中的一個Playground示例程序,來一步一步的演示每一種插值類型。

1. Linear(線性插值)

  • 描述:最簡單、最基礎的插值類型。數值在設定的持續時間內以恆定速率從起始值變化到結束值。它產生一種機械、均勻的動畫效果,缺乏自然感。

  • 數學曲線:一條直的斜線。

  • 適用場景:需要穩定、可預測移動的場合,如進度條填充、簡單的滑塊移動、數值的勻速計數等。不適合需要表現真實物理感的效果。

img

2. Quadratic(二次插值)

  • 描述:基於二次方函數 (t²) 的插值。它提供了明顯的加速或減速效果,比線性動畫看起來更自然。

  • In 模式:緩慢開始,然後加速到終點。

  • Out 模式:快速開始,然後減速到終點。

  • InOut 模式:結合兩者,緩慢開始,中間加速,最後減速。

  • 數學曲線:拋物線。

  • 適用場景:非常通用,適用於大多數 UI 元素的入場和退場動畫。例如,按鈕點擊、菜單滑入滑出、卡片彈出等。

img

3. Cubic(三次插值)

  • 描述:基於三次方函數 (t³) 的插值。其加速/減速的效果比 Quadratic 更強烈、更平滑。變化在開始和結束時更加細微,中間部分變化更快。

  • 數學曲線:比二次更陡峭的“S”形曲線。

  • 適用場景:當你希望動畫比 Quadratic 更有“力度”和“流暢感”時。是許多現代 UI 設計中默認的緩動效果之一。

img

4. Quartic(四次插值)

  • 描述:基於四次方函數 (t⁴) 的插值。其效果比 Cubic 更進一步,起始和結束時的停頓感更明顯,中間的加速過程非常迅猛。

  • 數學曲線:非常陡峭的“S”形曲線。

  • 適用場景:需要表現極強動力或快速爆發力的動畫,但使用相對較少,因為可能顯得過於突兀。

img

5. Quintic(五次插值)

  • 描述:基於五次方函數 (t⁵) 的插值。這是“冪函數”插值家族(Quadratic, Cubic, Quartic, Quintic)中最強力的一種。它在開始和結束時幾乎完全靜止,中間有極其短暫的劇烈變化。

  • 數學曲線:最陡峭的“S”形曲線。

  • 適用場景:創造戲劇性的、能量積聚後瞬間釋放的效果。在日常 UI 交互中很少使用。

img

6. Sinusoidal(正弦插值)

  • 描述:基於正弦函數 (sin) 的插值。它提供了一種非常平滑、柔和的加速和減速效果,沒有冪函數那種強烈的衝擊感。

  • 數學曲線:正弦波的四分之一週期,平滑的曲線。

  • 適用場景:適合需要優雅、平滑過渡的場景,如淡入淡出、柔和的光效變化、緩慢的頁面切換。

img

7. Exponential(指數插值)

  • 描述:基於指數函數 (2^(10(t-1))) 的插值。它創造出一種非常急劇的加速或減速效果,彷彿變化是瞬間發生或結束的。

  • 數學曲線:陡峭的、類似爆炸形的曲線。

  • 適用場景:模擬爆炸、能量脈衝、閃電等瞬間高能效果。或者用於需要極度強調的動畫,吸引用户全部注意力。

img

8. Circular(圓形插值)

  • 描述:基於圓形函數 (sqrt(1-t²)) 的插值。它產生一種獨特的慢入快出或快入慢出效果,其運動軌跡類似於四分之一圓弧。

  • In 模式:慢入快出,像從弧線頂端滑落。

  • Out 模式:快入慢出,像沿着弧線向上滾動到停止。

  • 數學曲線:圓形弧線。

  • 適用場景:創造一種有趣、俏皮的動畫風格,常見於一些遊戲 UI 或希望展現輕鬆活潑氛圍的應用中。

img

9. Elastic(彈性插值)

  • 描述:模擬彈簧振盪效果的插值。動畫值會超過結束值(Overshoot),然後來回振盪幾次,最終穩定在結束值。可以調整振盪的幅度和次數。

  • 數學曲線:衰減的正弦波。

  • 適用場景:為UI元素添加活力和彈性反饋。非常適合按鈕、彈窗、通知等交互元素,讓界面感覺更生動、響應更自然。

img

10. Back(回拉插值)

  • 描述:在動畫開始向目標移動之前,會先向相反方向(回拉)稍微移動一點,然後再衝向目標。同樣,在結束時也可能有輕微的過沖。

  • 數學曲線:一條先反向再正向的曲線。

  • 適用場景:模擬蓄力動作,比如拉弓射箭、準備起跳。讓動畫更有張力,提示用户一個動作即將發生。

img

11. Bounce(彈跳插值)

  • 描述:模擬小球落地彈跳效果的插值。動畫值到達結束點時不會立即停止,而是像球一樣彈跳幾次,幅度逐漸衰減,最終停止。

  • 數學曲線:一系列衰減的拋物線。

  • 適用場景:表現歡快、有趣的完成狀態。非常適合慶祝性提示、遊戲得分、任務完成等場景,能給用户帶來積極的反饋和愉悦感。

alt text

img

總結與選擇建議

插值類型 (InterpolationType) 核心特點 適用場景
Linear 勻速、機械 進度條、數值變化
Quadratic 自然加速/減速 通用UI交互(首選)
Cubic 更強烈的加速/減速 流暢的頁面過渡
Quartic/Quintic 極其強烈的加速/減速 戲劇化、能量爆發效果
Sinusoidal 非常平滑、柔和 淡入淡出、柔和變化
Exponential 急劇、瞬間變化 爆炸、脈衝、強提醒
Circular 圓弧運動 俏皮、有趣的動畫
Elastic 彈簧振盪、過沖 有彈性的UI反饋
Back 先回拉再前進 蓄力動作、提示性動畫
Bounce 落地彈跳 慶祝、完成狀態

Add a new 評論

Some HTML is okay.