嗨大家好鹰霍,記得我們以前講過屬性動(dòng)畫的一個(gè)類豹休,叫做ObjectAnimator。其實(shí)屬性動(dòng)畫還有另外一個(gè)類——ValueAnimator類敏晤。今天我們來看一下它的使用:
ValueAnimator介紹
ValueAnimator類是屬性動(dòng)畫中最核心的一個(gè)類贱田,其實(shí)如果有細(xì)心的朋友,在之前使用ObjectAnimator的時(shí)候就已經(jīng)發(fā)現(xiàn)ObjectAnimator是繼承自ValueAnimator的了嘴脾,也就是說我們ObjectAnimator的底層執(zhí)行還是靠我們ValueAnimator的男摧。
關(guān)于ObjectAnimator大家可以看一下我之前寫的:屬性動(dòng)畫ObjectAnimator類使用
而且ValueAnimator完全不受對(duì)象的限制:可以這么理解,我們有個(gè)初始值和結(jié)束值统阿,我們只是將這個(gè)屬性值從初始值到結(jié)束值通過一種循環(huán)機(jī)制彩倚,實(shí)現(xiàn)一種值的動(dòng)畫過度筹我,而在這段過程中它的值是不斷改變的扶平,我們通過獲取到這個(gè)不斷變化的屬性值,來給不同的對(duì)象進(jìn)行操作蔬蕊,達(dá)到屬性變換结澄,從而達(dá)到動(dòng)畫的效果。
是不是有點(diǎn)懵逼岸夯,接下來我們看一下他的獲取方法就很清楚了麻献。
java方式:
和ObjectAnimator一樣,也是通過某種靜態(tài)方法獲取到的實(shí)例猜扮。而不同的是這里面我們只把數(shù)值傳進(jìn)去勉吻,而ObjectAnimator是連同對(duì)象和他的屬性也一同傳進(jìn)去了(這個(gè)在等會(huì)兒會(huì)給大家詳細(xì)解釋)。后兩個(gè)方法我們暫時(shí)不要管旅赢,等以后再說齿桃。
我們先創(chuàng)建一個(gè)ValueAnimator對(duì)象吧:
現(xiàn)在我們有了一個(gè)ValueAnimator對(duì)象了,接下來我們看一下它有哪些常用的方法:
最常用的就是這幾個(gè)了煮盼,相信備注寫的清清楚楚短纵。
有一點(diǎn)要說一下:cancel和end,cancel調(diào)用后僵控,是保留到當(dāng)前的屬性值香到。而end調(diào)用后,是保留我們參數(shù)中填入的最后值。
我們說ValueAnimator會(huì)時(shí)刻監(jiān)聽屬性值的變化悠就,沒錯(cuò)千绪,ValueAnimator有自己的監(jiān)聽器。
ValueAnimator一共有三種監(jiān)聽器梗脾,如上所示:
第一個(gè)AnimatorUpdateListener這個(gè)監(jiān)聽器是必須添加的翘紊,因?yàn)槲覀儷@取不斷變化的屬性值是通過它里面的onAnimatorUpdate方法獲取的。而且如果不設(shè)置這個(gè)監(jiān)聽器藐唠,我們無法添加動(dòng)畫效果帆疟。
剩下兩個(gè)監(jiān)聽器大家自己下去試一下就好。
我之前添加了一個(gè)ImageView控件宇立,我讓獲取到的屬性值添加到img的rotation屬性中(這個(gè)屬性什么意思不知道的話一頭戰(zhàn)死吧踪宠。。妈嘹。柳琢。),然后調(diào)用start方法润脸。(我改成了按鍵調(diào)用)
我想現(xiàn)在大家知道我之前說的不被對(duì)象束縛是什么意思了柬脸,我們只是通過獲取不斷變化的屬性值,然后在回調(diào)接口中實(shí)現(xiàn)我們想要的邏輯毙驯。同時(shí)也可以看出屬性動(dòng)畫是真的改變屬性倒堕。而不同于View動(dòng)畫。
接下來我們看一下XML實(shí)現(xiàn):
1.在res目錄下創(chuàng)建animator文件目錄爆价。
2.animator中創(chuàng)建xml文件垦巴。
xml的標(biāo)簽看的應(yīng)該很明白,不用多做解釋了吧铭段。
然后調(diào)用和ObjectAnimator一樣:
然后通過我們添加其他方法去完善骤宣,最后start就可以了。
關(guān)于ValueAnimator的基本用法就是這些了序愚。在下一章我們將進(jìn)一步理解屬性動(dòng)畫憔披,以及學(xué)習(xí)更加高級(jí)的用法。