自定义Interpolator
nterpolator這個東西很難進行翻譯,直譯過來的話是補間器的意思,它的主要作用是可以控制動畫的變化速率,比如去實現(xiàn)一種非線性運動的動畫效果。那么什么叫做非線性運動的動畫效果呢?就是說動畫改變的速率不是一成不變的,像加速運動以及減速運動都屬于非線性運動。
不過Interpolator并不是屬性動畫中新增的技術(shù),實際上從Android 1.0版本開始就一直存在Interpolator接口了,而之前的補間動畫當(dāng)然也是支持這個功能的。只不過在屬性動畫中新增了一個TimeInterpolator接口,這個接口是用于兼容之前的Interpolator的,這使得所有過去的Interpolator實現(xiàn)類都可以直接拿過來放到屬性動畫當(dāng)中使用,那么我們來看一下現(xiàn)在TimeInterpolator接口的所有實現(xiàn)類,如下圖所示:
可以看到,TimeInterpolator接口已經(jīng)有非常多的實現(xiàn)類了,這些都是Android系統(tǒng)內(nèi)置好的并且我們可以直接使用的Interpolator。每個Interpolator都有它各自的實現(xiàn)效果,比如說AccelerateInterpolator就是一個加速運動的Interpolator,而DecelerateInterpolator就是一個減速運動的Interpolator。
我覺得細心的朋友應(yīng)該早已經(jīng)發(fā)現(xiàn)了,在前面兩篇文章當(dāng)中我們所學(xué)到的所有屬性動畫,其實都不是在進行一種線程運動。比如說在“上”篇文章中使用ValueAnimator所打印的值如下所示:
可以看到,一開始的值變化速度明顯比較慢,僅0.0開頭的就打印了4次,之后開始加速,最后階段又開始減速,因此我們可以很明顯地看出這一個先加速后減速的Interpolator。
編寫自定義Interpolator最主要的難度都是在于數(shù)學(xué)計算方面的,由于我數(shù)學(xué)并不是很好,因此這里也就寫一個簡單點的Interpolator來給大家演示一下。既然屬性動畫默認的Interpolator是先加速后減速的一種方式,這里我們就對它進行一個簡單的修改,讓它變成先減速后加速的方式。新建DecelerateAccelerateInterpolator類,讓它實現(xiàn)TimeInterpolator接口,代碼如下所示:
[java]?view plaincopy同樣我們可以將這個算法的執(zhí)行情況通過曲線圖的方式繪制出來,結(jié)果如下圖所示:
可以看到,這也是一個S型的曲線圖,只不過曲線的方向和剛才是相反的。從上圖中我們可以很清楚地看出來,一開始縱坐標(biāo)的變化幅度很大,然后逐漸變小,橫坐標(biāo)到0.5的時候縱坐標(biāo)變化幅度趨近于零,之后隨著橫坐標(biāo)繼續(xù)增加縱坐標(biāo)的變化幅度又開始變大,的確是先減速后加速的效果。
那么現(xiàn)在我們將DecelerateAccelerateInterpolator在代碼中進行替換,如下所示:
[java]?view plaincopy非常簡單,就是將DecelerateAccelerateInterpolator的實例傳入到setInterpolator()方法當(dāng)中。重新運行一下代碼,效果如下圖所示:
OK!小球的運動確實是先減速后加速的效果,說明我們自定義的Interpolator已經(jīng)可以正常工作了。通過這樣一個程度的學(xué)習(xí),相信大家對屬性動畫Interpolator的理解和使用都達到了一個比較深刻的層次了。
總結(jié)
以上是生活随笔為你收集整理的自定义Interpolator的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Android学习笔记二] View
- 下一篇: 关于JQuery简单介绍