Android属性动画 PropertyValuesHolder
轉載請標明出處:http://blog.csdn.net/zhaoyanjun6/article/details/118961952
本文出自【趙彥軍的博客】
文章目錄
- PropertyValuesHolder
- PropertyValuesHolder 之 ofFloat()、ofInt()講解
- 實戰-旋轉動畫
- 實戰-組合動畫
- 總結
PropertyValuesHolder
PropertyValuesHolder這個類的意義就是,它其中保存了動畫過程中所需要操作的屬性和對應的值。
我們通過ofFloat(Object target, String propertyName, float… values)構造的動畫,ofFloat()的內部實現其實就是將傳進來的參數封裝成 PropertyValuesHolder實例來保存動畫狀態。在封裝成 PropertyValuesHolder實例以后,后期的各種操作也是以PropertyValuesHolder為主的。
創建PropertyValuesHolder實例的函數:
public static PropertyValuesHolder ofFloat(String propertyName, float... values) public static PropertyValuesHolder ofInt(String propertyName, int... values) public static PropertyValuesHolder ofObject(String propertyName, TypeEvaluator evaluator,Object... values) public static PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values)PropertyValuesHolder 之 ofFloat()、ofInt()講解
構造函數:
public static PropertyValuesHolder ofFloat(String propertyName, float... values) public static PropertyValuesHolder ofInt(String propertyName, int... values)其中:
| propertyName: | propertyName: 表示ObjectAnimator需要操作的屬性名。即ObjectAnimator 需要通過反射查找對應屬性的setProperty()函數的那個property |
| values: | 屬性所對應的參數,同樣是可變長參數,可以指定多個 |
而 ObjectAnimator 的 ofFloat 如下:
public static ObjectAnimator ofFloat(Object target, String propertyName, float... values);可以看到在 ObjectAnimator.ofFloat中只比 PropertyValuesHolder 的 ofFloat多了一個target,其它都是完全一樣的!
將構造的PropertyValuesHolder實例設置進 ObjectAnimator:
public static ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)其中:
| target: | 指需要執行動畫的控件 |
| values: | 是一個可變長參數,可以傳進去多個 PropertyValuesHolder 實例,由于每個 PropertyValuesHolder 實例都會針對一個屬性做動畫,所以如果傳進去多個 PropertyValuesHolder 實例,將會對控件的多個屬性同時做動畫操作。 |
實戰-旋轉動畫
我們先用 ObjectAnimator.ofFloat 做一個旋轉動畫
var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f) rotation.duration = 3000 rotation.start()
下面我們再用 ObjectAnimator.ofPropertyValuesHolder 實現相同的功能。
運行起來,可以看到,效果是一樣的,效果圖我就不放了,你們可以自己試試。
我們再來試試組合動畫。
實戰-組合動畫
我們先用 AnimatorSet 做一個組合
var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f) var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 300f) var translationY = ObjectAnimator.ofFloat(myView, "translationY", 0f, 300f)val set = AnimatorSet() set.duration = 3000 set.playTogether(rotation, translationX, translationY) set.start()我們把代碼運行起來,看看效果:
下面我們用 PropertyValuesHolder 實現一遍。
運行起來,看看效果是一樣的。
總結
AnimatorSet 是把多個子動畫組合起來,可以理解成把動畫做的更大,更復雜。
PropertyValuesHolder 是把一個動畫拆解成多個子模塊,可以理解成把動畫做的更小,更精細。
總結
以上是生活随笔為你收集整理的Android属性动画 PropertyValuesHolder的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android属性动画 TypeEval
- 下一篇: android sina oauth2.