Android SurfaceView 筆記

 

SurfaceView 是一個繼承了View但是由於一般的View有這很大區別的類.

 

這是由於 SurfaceView 的繪製方法和原來的View不同.在 View 中系統不允許主線程外的線程控制 UI .但是 SurfaceView 卻可以 .下面是我總結的幾個要點:

1. 首先需要實現 View 的構造方法.( 如果  需要在XML 文件中佈局需要實現public S(Context context, AttributeSet attrs)  這個構造方法 )

2. 由於需要對SurfaceView 進行監控所以需要實現 SurfaceHolder.Callback 這個接口( 可以用內部類或者方法實現.) 這個接口需要實現三個方法:

public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}  //大小改變的時候被調用到.

public void surfaceCreated(SurfaceHolder holder) {} // 創建的時候被調用到

public void surfaceDestroyed(SurfaceHolder holder) {} //銷燬的時候被調用

3.在SurfaceView 中屏幕接觸處理和 佈局處理和View一樣.

4. 使用繪製的時候和 View 完全不一樣.他是使用 SufaceHodler 的方法

public canvas holder.lockCanvas();

public void unlockCanvasAndPost(canvas);

第一個方法可以調用出一個Canvas 畫布.在上面繪製所需的畫面.然後調用第二個方法.這樣就可以在屏幕上面繪製出來的.

View中的 invalidate()方法需要在主線程中調用(postInvalidate()不同).但是 SurfaceView不需要.SurfaceView繪製效率比View高.

5.SurfaceView中如果需要請求重新佈局同樣使用 requestLayout();

6. 和View一樣重要的一些方法:onMeasure(int ,int); 是使用 View 前需要調用的方法. 通知View進行自身尺寸測量.

如果自己重寫的話測量完自身大小注意需要調用setMeasuredDimension(int, int);這個方法設置控件大小.

onLayout(boolean,int,int,int,int); 這個方法使父控件具體分配給當前View的具體位置的方法.

 

 

發佈了6 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章