一 前文概要說明
首先得簡單說明一下Surface與SurfaceHolder.Callback之間的聯絡。
Surface是android的一個重要元素,用於android畫面的圖形繪製。而SurfaceView 是視圖(View)的一個繼承類,每一個SurfaceView都內嵌封裝一個Surface。通過調用SurfaceHolder可以調用 SurfaceView,控製圖形的尺寸和大小。而SurfaceHolder 是通過surfaceView.getholder()來取得。創立SurfaceHolder 對象後,用SurfaceHolder.Callback()來回調SurfaceHolder,對SurfaceView進行控制。
單純得用文字表述有點繞,因此下面將給出幾段代碼以供理解。
SurfaceHolder holder = ((SurfaceView) findViewById(R.id.cameraPreview)).getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
這樣就可以通過callback()對SurfaceView進行修改。
二 callback()方法介紹
callback()包括三個函數:
①surfaceCreated(SurfaceHolderholder)
當Surface第一次建立後會立即調用該函數。程式可以在該函數中做些和繪製介面相關的初始化工作,一般情況下都是在另外的線程來繪製介面,所以不要在這個函數中繪製Surface。
參數
holder surface所建立的SurfaceHolder
②surfaceChanged(SurfaceHolder holder, int format, int width, int height)
當Surface的狀態(大小和格式)發生變化的時候會調用該函數,在surfaceCreated調用後該函數至少會被調用一次。
參數
holder 更新surface的SurfaceHolder
format 新的圖形格式
width 新的寬度
height 新的高度
③surfaceDestroyed()
當Surface被摧毀前會調用該函數,該函數被調用後就不能繼續使用Surface了,一般在該函數中來清理使用的資源。
參數
holder 所要被刪除的surface的SurfaceHolder