2018年1月13日 星期六

Android 動畫

Android 目前的動畫處理系統是 property  animation system(pas),這是用來取代更早時期的 Android 動畫系統 View animation system(vas),vas 的缺點是只能改變 view 在 screen 上被畫出來的位置,實際上的位置沒有改變,例如將一個 button 從 x = 0 的位置平移到 x = 10 的位置,從畫面上來看 button 移動了,但是 button 實際上還在 x = 0 的位置,要點擊 x = 10 位置才會觸發 button 的 onClick event,pas 就解決了這個問題,它會將 view 的 property 一起改變

pas 提供了 ValueAnimator,ObjectAnimator讓使用者操作動畫,用 ObjectAnimator  應該可以處理大部分的動畫,pas也提供了 View 一般預設 property 型態的 evaluator 例如 IntEvaluator,FloatEvaluator 和 ArgbEvaluator,用來在動畫過程中計算出 view property

此外還提供了多種 Interpolators 可供選擇,它的作用是決定動畫的速度,例如 LinearInterpolator 就是動畫過程中速度是一致的,而 AccelerateInterpolator 就是動畫一開始速度慢後面慢慢變快

還有 AnimatorSet 可以讓使用者將多個動畫結合在一起操作,例如哪些動畫要同時啟用,哪些動畫要在特定動畫前啟用等等

Keyframes 跟 PropertyValuesHolder 讓使用者更簡單的實現出複雜的動畫,Keyframe 的概念是從傳統動畫中衍伸出,一個 Keyframe 定義了某個時間點該 view 的 property,而兩個 Keyframe 中間的動畫則由系統幫你補起來,例如 Keyframe 1 定義了時間 0 和 x = 0,Keyframe 2 定義了時間 10 和 x = 10,則系統會幫你做出平移 x 從 0 到 10 的動畫,藉由定義多個 Keyframe,就可以實現比較複雜的動畫效果

也可以將 animator 或 animator set 寫在 xml 裡面,方便多個 activity 可以共享同樣的動畫效果

Reference
https://developer.android.com/guide/topics/graphics/prop-animation.html

沒有留言:

張貼留言