iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
0

嗨大家今天過得好嗎?昨天介紹怎麼讓 icon 動起來的 Animated icon,但其實除了 drawable 外的其他不是 View 的 resource 在 Property Animation 的世界裡都可以動起來,只要指定哪個物件、動畫的時間長度和每個時間點對應的物件位置,現在讓我們一起動起來。

Property Animation 需要定義下列幾項動畫要素:

  • 時間:動畫的時間長度,預設是 300 ms。
  • 時間對應位置:定義動畫進行時間與位置的關聯。
  • 重複次數:動畫一共要進行幾次。
  • 畫面更新延遲:畫面多久要更新一次,預設是 10 ms。

因為 ValueAnimator 繼承自 TimeInterpolator 與 TypeEvalutor 可以計算動畫的模型,ValueAnimator 還可以知道起始位置、經過時間、以及開始動畫,動畫開始後可以透過 ValueAnimator.AnimatorUpdatelistener 監聽動畫的更新, ValueAnimator 預設有 IntEvaluator、FloatEvaluator、ArgbEvaluator 等物件定義 value type,如果是 Int、Float 和顏色之外的 value type 也可以繼承 TypeEvaluator 的 Interface 後自行實作。

// MyTypeEvaluator 需要繼承 TypeEvaluator 並定義起始值
ValueAnimator.ofObject(MyTypeEvaluator(), startPropertyValue, endPropertyValue).apply {
    duration = 1000
		addUpdateListener { updatedAnimation ->
        // 針對要設定動畫的屬性提供不同的 value type
    }
    start()
}

Property Animation 和一般的 View Animation 的差別是 View 的動畫可以改變的屬性有限,像是縮放和旋轉,但是 Property 的動畫就不限跟 View 相關的屬性,像是 background color 這種也可以加上動畫效果改變。但也因為限制比較多,View Animation 的使用就比 Property Animation 來得方便,越大程度的自由還是要付出相對代價的。

動畫也可能隨著狀態的改變有不同設定,例如被點選前後的樣式不同可以加上 StateListAnimator 的屬性,先在 res/xml/ 的路徑下新增 XML,針對 state_pressed 為 true 或 false 設定不同 ValueAnimator,在要加上動畫的物件再加上 android:stateListAnimator 的屬性設定動畫。

Animator 其實都對 UI 加上額外繪製的工作,在使用時要特別注意效能問題,可以使用 Android Studio 的 Profile GPU Rendering 工具檢測效能是否正常。 如果喜歡今天分享的內容的邦友請繼續關注「打造一個厲害的普通 Android App - 使用者體驗優化」的主題,我們明天見。


上一篇
動起來 (1):Animated icon
系列文
打造一個厲害的普通 Android App - 使用者體驗優化16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言