、SurfaceView的使用
首先繼承SurfaceView,並實現SurfaceHolder.Callback介面,實現它的三個方法:surfaceCreated,surfaceChanged,surfaceDestroyed。
surfaceCreated(SurfaceHolder holder):surface建立的時候呼叫,一般在該方法中啟動繪圖的執行緒。
surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸發生改變的時候呼叫,如橫豎屏切換。
surfaceDestroyed(SurfaceHolder holder) :surface被銷燬的時候呼叫,如退出遊戲畫面,一般在該方法中停止繪圖執行緒。
還需要獲得SurfaceHolder,並添加回調函式,這樣這三個方法才會執行。
如何得到SurfaceHolder?其實很簡單,在SurfaceView中提供了getHolder()方法。如果該surfaceView中還需要實現回撥生命週期,那麼holder還需要呼叫addCallback()方法為其添加回調宣告週期。
SurfaceHolder中還有幾個十分重要的方法:
lockCanvas():該方法用於鎖定畫布,這樣Surface中就可以指定back buffer中的畫布是那一塊了。之後就可以在畫布上進行繪畫,該方法的API如下
lockCanvas()方法是對整個Surface進行重繪,但是很多情況下,我們只需要對Surface的一小部分進行重畫時,則使用lockCanvas(Rect dirty)更為明智。
lockCanvas(Rect dirty)透過其中的引數也可以看出,其只更新Rect部分的畫面。
以上兩個方法是對Canvas進行鎖定,當Canvas繪製完畢之後,Surface的front buffer就需要這個Surface進行顯示。如果此時Canvas還在鎖定狀態,則Surface的front buffer將不能得到Canvas。所以此時應該在canvas繪畫完畢之後,釋放鎖定。
unlockCanvasAndPost(Canvas canvas):用於釋放出於鎖定狀態的Canvas。
、SurfaceView的使用
首先繼承SurfaceView,並實現SurfaceHolder.Callback介面,實現它的三個方法:surfaceCreated,surfaceChanged,surfaceDestroyed。
surfaceCreated(SurfaceHolder holder):surface建立的時候呼叫,一般在該方法中啟動繪圖的執行緒。
surfaceChanged(SurfaceHolder holder, int format, int width,int height):surface尺寸發生改變的時候呼叫,如橫豎屏切換。
surfaceDestroyed(SurfaceHolder holder) :surface被銷燬的時候呼叫,如退出遊戲畫面,一般在該方法中停止繪圖執行緒。
還需要獲得SurfaceHolder,並添加回調函式,這樣這三個方法才會執行。
如何得到SurfaceHolder?其實很簡單,在SurfaceView中提供了getHolder()方法。如果該surfaceView中還需要實現回撥生命週期,那麼holder還需要呼叫addCallback()方法為其添加回調宣告週期。
SurfaceHolder中還有幾個十分重要的方法:
lockCanvas():該方法用於鎖定畫布,這樣Surface中就可以指定back buffer中的畫布是那一塊了。之後就可以在畫布上進行繪畫,該方法的API如下
lockCanvas()方法是對整個Surface進行重繪,但是很多情況下,我們只需要對Surface的一小部分進行重畫時,則使用lockCanvas(Rect dirty)更為明智。
lockCanvas(Rect dirty)透過其中的引數也可以看出,其只更新Rect部分的畫面。
以上兩個方法是對Canvas進行鎖定,當Canvas繪製完畢之後,Surface的front buffer就需要這個Surface進行顯示。如果此時Canvas還在鎖定狀態,則Surface的front buffer將不能得到Canvas。所以此時應該在canvas繪畫完畢之後,釋放鎖定。
unlockCanvasAndPost(Canvas canvas):用於釋放出於鎖定狀態的Canvas。