Surface、SurfaceView、SurfaceHolder和SurfaceHolder.Callback之間的聯繫

1、Surface

    由屏幕顯示內容合成器(screen compositor)所管理的原生緩衝器的句柄,即通過Surface可以獲得原生緩衝器以及其中的內容,可以理解爲Surface就是一個用來畫圖形圖像的地方。

    Surface中有一個Canvas,專門用來畫圖。

2、SurfaceView

    SurfaceView就是Surface的View,通過SurfaceView可以部分或者全部看見Surface的內容。

    Surface通過SurfaceView才能展示其中的內容。

    在這個層面上而言,Surface就是管理數據的地方,SurfaceView就是展示數據的地方。

3、SurfaceHolder是一個接口,其作用就像一個關於Surface的監聽器,提供訪問和控制SurfaceView  背後的Surface的相關方法。它通過三個回調方法使我們可以感知Surface的創建,銷燬和改變。在SurfaceView有一個方法getHolder,可以很方便的獲得SurfaceView所對應的Surface所對應的SurfaceHolder

    SurfaceHolder裏面的重要方法:

        abstract Canvas lockCanvas():獲得一個Canvas對象,並鎖定。

        abstract void unlockCanvasAndPost(Canvas canvas):當修改Surface中的數據完成後,釋放同步鎖,並提交改變,然後將新的數據進行展示,同時Surface中相關數據將會丟失。

4、SurfaceHolder.Callback:裏面定義了三個接口方法:

    abstract void surfaceChanged(SurfaceHolder holder, int format, int width, int height):當surface發生任何結構性的變化時(格式或者大小),該方法就會被立即調用。

    abstract void surfaceCreated(SurfaceHolder holder):當surface對象創建後,該方法就會被立即調用。

    abstract void surfaceDestroyed(SurfaceHolder holder):當surface對象在將要銷燬前,該方法會被立即調用。

 

具體解釋可以參見:http://blog.csdn.net/pathuang68/article/details/7351317

http://www.linuxidc.com/Linux/2012-08/67619.htm兩篇文章。同時感謝兩位博主。

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