寫代碼尷尬的是類太多不知道應(yīng)該使用哪一個(gè),正確的說是不知道某個(gè)類是做什么的.所以比較喜歡從源頭看一下,有個(gè)大致了解.
屬性動(dòng)畫需要了解的
補(bǔ)間動(dòng)畫需要了解的
屬性動(dòng)畫與3.0之前的一個(gè)對(duì)比
因?yàn)橹饕菫榱肆私馐褂脤傩詣?dòng)畫,所以統(tǒng)一將幀動(dòng)畫和補(bǔ)間動(dòng)畫成為3.0之前
- 3.0之前的動(dòng)畫是相對(duì)健全的,因?yàn)橹荒軡M足透明度,旋轉(zhuǎn),移動(dòng),縮放等行為.
- 3.0之前的動(dòng)畫是只能夠作用在view上的,文檔是這么寫的
Abstraction for an Animation that can be applied to Views, Surfaces, or other objects.
一個(gè)抽象的類被作用于view,surfaces,或者其他類上. - 另外補(bǔ)間動(dòng)畫還有一個(gè)致命的缺點(diǎn),就是只改變了view的顯示效果,而不會(huì)真的去改變view的屬性.
屬性動(dòng)畫的使用
學(xué)習(xí)使用屬性動(dòng)畫需要知道這么三個(gè)類ValueAnimator
,ObjectAnimator
,AnimatorSet
.上面展示了這三者的關(guān)系.
在使用前有必要對(duì)屬性動(dòng)畫的機(jī)制進(jìn)行一個(gè)了解,然后再看如何使用最后在回顧一下這個(gè)機(jī)制,那屬性動(dòng)畫就可以掌握了.
屬性動(dòng)畫的運(yùn)行機(jī)制是不斷通過對(duì)值進(jìn)行操作來實(shí)現(xiàn)的,即對(duì)初始值和結(jié)束值進(jìn)行設(shè)置,這之間的就由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秒內(nèi)數(shù)值的一個(gè)變化進(jìn)度.
首先使用它的靜態(tài)工廠類返回一個(gè)對(duì)象,同時(shí)設(shè)置參數(shù)0,1這兩個(gè)值就是屬性動(dòng)畫機(jī)制里的起始和中指指.如果只傳一個(gè)參數(shù)的話代表起始和終止值相同.同樣也可以傳遞多個(gè)值,因?yàn)檫@個(gè)方法是一個(gè)可變參數(shù)數(shù)組的形式.
打印結(jié)果如下,內(nèi)容太長(zhǎng)就只截取了開始和結(jié)尾.
同樣如果你需要的是整數(shù)的過度變化,那么就調(diào)用下面這個(gè)方法.
ValueAnimator animator=ValueAnimator.ofInt(0,1);
基礎(chǔ)的就是這樣,我們還需要知道它的其它的一些方法.
- cancel() 取消當(dāng)前動(dòng)畫
- getDuration() 獲取這個(gè)動(dòng)畫的執(zhí)行時(shí)間
- getRepeatMode() 獲取重復(fù)模式
- getRepeatCount() 獲取重復(fù)次數(shù)
- getStartDelay() 獲取延遲開始時(shí)間
- setDuration(long duration) 設(shè)置動(dòng)畫之行時(shí)間
- setRepeatCount(int value)
- setRepeatMode(int value)
- start()
在設(shè)置動(dòng)畫的重復(fù)模式的時(shí)候有這么三個(gè)模式可以設(shè)置,也是該類中的常量值
- INFINITE 無窮盡的一直執(zhí)行
- RESTART 重頭開始再次執(zhí)行
- REVERSE 從結(jié)束開始向開始返回去執(zhí)行
上面就是ValueAnimator的簡(jiǎn)單介紹.