1. 程式人生 > >【Android進階】如何寫一個很屌的動畫(1)---先實現一個簡易的自定義動畫框架

【Android進階】如何寫一個很屌的動畫(1)---先實現一個簡易的自定義動畫框架

class MyView extends View {
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        invalidate();
    }
}

這樣一來,View每次繪製都是觸發下一次繪製,不過你不用擔心它一秒會繪製上百幀,Andriod應該是做了優化,正常情況下,這樣的實現方案一秒最多60幀,而60幀已經是非常流暢的一個幀數了(一般情況下24幀已經足夠)。這種方案的“驅動”比較適合在有一定實現的View上用,並且動畫的東西與View的實現有關,例如TextView做一個文字變動的動畫等。

2、View動畫,屬性動畫(Animation/Animator) 
關於這點的知識網上有太多太多,而且總結得非常好,或者還是可以看看這篇文章:Android 動畫基礎

3、Scroller 
有接觸過介面滑動,應該對Scroller也有一定的認知,它需要結合View的computeScroll()方法實現。

這個“驅動”如它名字所示的,比較適合滑動相關的操作,因為它啟動動畫的引數就是位置的值。當然,你要用它來做點別的什麼動畫,也是完全沒問題的。

4、自己實現一個簡易的“動畫驅動” 
既然有些需求用原有的方法難以實現或者實現起來不太合適,這個時候我們就需要自己動手了。因此,我也寫了一個簡易的“動畫驅動”,同時擴充套件了一些額外的動畫屬性,可以方便的實現各種需求,具體請看下文。

這種驅動最大的優點就是所以東西都可以自己控制,例如控制幀頻,控制動畫的時間流逝速度等等,你想怎樣就怎樣。

自定義簡易的動畫框架 

這也是本文的重點,也是後面實現“高仿手機管家記憶體清理的動畫”的基礎。最下面有原始碼下載地址。

這個框架,在“動畫驅動”上,使用的是自己寫的“驅動”,其原理也是不斷讓介面重繪,同時可以控制一些驅動的引數,例如幀頻等;在繪製上,則儘量仿造現在View框架來寫,接下來我將詳細說明。

首先說說這個框架的用途:主要用於繪製一些純動畫的介面,例如上面手機管家的動圖那些介面。

既然是純動畫,那這個動畫的載體直接用View或者SurfaceView即可。我比傾向直接用View,因為SurfaceView不支援硬體加速,而開啟了硬體加速的View繪製效率比SurfaceView要好。 
所以,框架的載體就是一個繼承View的AnimView: