寫代碼尷尬的是類太多不知道應該使用哪一個,正確的說是不知道某個類是做什么的.所以比較喜歡從源頭看一下,有個大致了解.
屬性動畫需要了解的
這里寫圖片描述
補間動畫需要了解的
這里寫圖片描述
屬性動畫與3.0之前的一個對比
因為主要是為了了解使用屬性動畫,所以統一將幀動畫和補間動畫成為3.0之前
- 3.0之前的動畫是相對健全的,因為只能滿足透明度,旋轉,移動,縮放等行為.
- 3.0之前的動畫是只能夠作用在view上的,文檔是這么寫的
Abstraction for an Animation that can be applied to Views, Surfaces, or other objects.
一個抽象的類被作用于view,surfaces,或者其他類上. - 另外補間動畫還有一個致命的缺點,就是只改變了view的顯示效果,而不會真的去改變view的屬性.
屬性動畫的使用
學習使用屬性動畫需要知道這么三個類ValueAnimator
,ObjectAnimator
,AnimatorSet
.上面展示了這三者的關系.
在使用前有必要對屬性動畫的機制進行一個了解,然后再看如何使用最后在回顧一下這個機制,那屬性動畫就可以掌握了.
屬性動畫的運行機制是不斷通過對值進行操作來實現的,即對初始值和結束值進行設置,這之間的就由ValueAnimator來完成.
ValueAnimator的使用
private void initAnimator() {
ValueAnimator animator=ValueAnimator.ofFloat(0f,1f);
animator.setDuration(3000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
LogUtil.i(animation.getAnimatedValue());
}
});
animator.start();
}
上面這段代碼就是展示了從0到1在3秒內數值的一個變化進度.
首先使用它的靜態工廠類返回一個對象,同時設置參數0,1這兩個值就是屬性動畫機制里的起始和中指指.如果只傳一個參數的話代表起始和終止值相同.同樣也可以傳遞多個值,因為這個方法是一個可變參數數組的形式.
這里寫圖片描述
打印結果如下,內容太長就只截取了開始和結尾.
這里寫圖片描述
這里寫圖片描述
同樣如果你需要的是整數的過度變化,那么就調用下面這個方法.
ValueAnimator animator=ValueAnimator.ofInt(0,1);
基礎的就是這樣,我們還需要知道它的其它的一些方法.
- cancel() 取消當前動畫
- getDuration() 獲取這個動畫的執行時間
- getRepeatMode() 獲取重復模式
- getRepeatCount() 獲取重復次數
- getStartDelay() 獲取延遲開始時間
- setDuration(long duration) 設置動畫之行時間
- setRepeatCount(int value)
- setRepeatMode(int value)
- start()
在設置動畫的重復模式的時候有這么三個模式可以設置,也是該類中的常量值
- INFINITE 無窮盡的一直執行
- RESTART 重頭開始再次執行
- REVERSE 從結束開始向開始返回去執行
上面就是ValueAnimator的簡單介紹.