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