回覆列表
  • 1 # 使用者2841260154184

    、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。

  • 中秋節和大豐收的關聯?
  • 數位電路TTL和CMOS閘電路的注意事項?