動畫篇(三)——總結·android動畫七問七答

首先先貼上之前寫的關於android動畫的內容,有興趣的小夥伴可以看一看
動畫篇(一)——android動畫基礎
動畫篇(二)——android屬性動畫

這篇文章是對上面兩篇文章的一個總結,以問答的方式將知識點進行歸納,有一定基礎的小夥伴可以直接來試着解答下面的問題
本人水平有限,文章中如果出現什麼不正確或者模糊的地方,還請各位小夥伴留下評論,多多指教 : )
好了,我們現在進入正題


1、anroid動畫分爲哪幾種?簡單解釋並說明其適合應用的場景。

android動畫可以劃分爲view動畫幀動畫屬性動畫
——view動畫:通過對場景裏的對象不斷做圖像變換(平移translateion、縮放scale、旋轉rotation、透明度alpha),從而產生動畫效果,它是一種漸進式動畫。適用於非交互性的動畫展示。
幀動畫:其實也是view動畫的一種,它通過順序播放一系列圖像從而產生動畫的效果,可以簡單理解爲圖片的快速切換,缺點也很明顯,那就是如果圖片過多或者過大都會導致OMM(out of memory)。適用於個性化動畫的表現。

屬性動畫:爲android3.0之後的新特性,因此之前的版本無法直接使用屬性動畫,不過可以通過兼容庫來使用它。通過調用屬性的get和set方法重新設置控件的屬性值,實現動畫的效果。適用於交互性的動畫

2、view動畫和屬性動畫的區別。

view動畫就是不斷的去調用系統的onDraw方法,去重新繪製組件並顯示給用戶,而屬性動畫則是通過調用屬性的get和set方法重新設置控件的屬性值,實現動畫的效果。

3、view動畫有哪些侷限性

  • view動畫只是重繪了動畫,改變了顯示的位置,但是真正事件響應的位置,卻沒有發生任何改變。所以,Animation並不適合製作具有交互的動畫效果。它只能用來完成一些顯示性的效果。

  • 因爲Animation的工作原理,上面介紹了,是不斷調用系統的onDraw()方法去繪製圖像,那麼必然十分耗費GPU,效率不高

  • Animation提供了位移、旋轉、透明度、縮放這四種動畫,雖然經過組合,可以創造出很多的動畫效果,但是有時候依然無法制作出複雜好看的動畫,即存在動畫效果上的侷限

4、什麼叫插值器和估值器?其作用是什麼?

  • TimeInterPolator,中文翻譯時間插值器,它的作用是根據時間流逝的百分比來計算當前屬性值改變的百分比,系統預設的有LinearInterPolator(線性插值器:勻速動畫)、AccelerateDecelerateInterPolator(加速減速插值器:動畫兩頭慢,中間快)、DecelerateInterPolator(減速插值器:動畫越來越慢)等。

  • TypeEvaluator,中文翻譯爲類型估值算法,也叫作估值器,它的作用是根據當前屬性改變的百分比來計算改變後的屬性值
    屬性動畫中的插值器和估值器很重要,它們是實現費勻速動畫的重要手段。

5、屬性動畫提供了那幾種監聽器?

android屬性動畫提供了2種監聽器用於監聽動畫的播放過程,它們是AnimatorUpdateListener和AnimatorListener
- Animator.AnimatorListener中的接口
onAnimationStart() - 當動畫開始的時候調用.
onAnimationEnd() - 動畫結束時調用.
onAnimationRepeat() - 動畫重複時調用.
onAnimationCancel() - 動畫取消時調用.取消動畫也會調用onAnimationEnd,它不會關係動畫是怎麼結束的。
系統還提供了AnimatorListenerAdapter這個類它是AnimatorListener的適配類,這樣就可以有選擇地實現上面四個方法了,因爲不是所有方法都必須實習的。
- AnimatorUpdateListener會監聽整個動畫過程,我們知道動畫是由許多幀構成的,每播放一幀,onAnimatorUpdate就會被調用一次,利用整個特性,我們可以做一些特殊的事情。

6、大致解釋一下屬性動畫的工作原理是什麼?

屬性動畫要求動畫作用的對象提供該屬性的get和set方法,屬性動畫根據外界傳遞的該屬性的初始值和最終值,以動畫的效果多次去調用set方法。每次傳遞給set方法的值都不一樣 ,確切來說是是隨着時間的推移,所傳遞的值越來越接近最終值。如果動畫的時候沒有傳遞初始值,那麼還提供get方法,因爲系統要去獲取屬性的初始值。

7、根據屬性動畫的工作原理,想要讓屬性動畫生效,必須滿足那些條件?

必須滿足2個條件:
- 第一:object必須提供setAbc方法,如果動畫的時候沒有傳遞初始值,那麼還要提供getAbc的方法,因爲系統要去去abc屬性的初始值。(若此條不滿足程序直接崩潰)
- 第二:object的setAbc對屬性abc所做的改變必須能通過某種方法反映出來,比如會帶來UI的改變之類的(如果不滿足此條,動畫無效果但不會奔潰)

以上7個問題,是目前我能想到的一些關於android動畫的問題,都偏向於理論,並沒有問具體動畫的實現過程,日後有新的問題時,我會及時更新這篇文章的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章