快速學會SurfaceView用法:
SurfaceView是視圖(View)的繼承類,這個視圖裏內嵌了一個專門用於繪製的Surface。你可以控制這個Surface的格式和尺寸。Surfaceview控制這個Surface的繪製位置。
第一步:
繼承SurfaceView並實現SurfaceHolder.Callback接口
第二步: SurfaceView.getHolder()獲得SurfaceHolder對象
第三步:SurfaceHolder.addCallback(callback)添加回調函數
第四步:SurfaceHolder.lockCanvas()獲得Canvas對象並鎖定畫布
第五步:Canvas繪畫
第六步:SurfaceHolder.unlockCanvasAndPost(Canvas canvas)結束鎖定畫圖,並提交改變,將圖形顯示。
首先測試代碼:
public class MySurfaceViewTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
}
然後創建MySurfaceView類
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
private Canvas canvas;
SurfaceHolder myholder;
public MySurfaceView(Context context) {
super(context);
System.out.println("構造方法");
//獲取SurfaceHolder對象
myholder=getHolder();
//添加回調函數,綁定回調方法
myholder.addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
System.out.println("surfaceChanged方法");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
System.out.println("surfaceCreated方法");
//鎖定畫布
canvas=myholder.lockCanvas();
//設置畫筆
Paint paint=new Paint();
paint.setColor(Color.RED);
//繪製圖形
canvas.drawLine(10, 20, 40, 40, paint);
canvas.drawCircle(50, 50, 6, paint);
myholder.unlockCanvasAndPost(canvas);
Rect rect=new Rect(70, 70, 200, 200);
Canvas mycanvas=myholder.lockCanvas(rect);
paint.setColor(Color.GREEN);
//繪製圖形
mycanvas.drawCircle(75, 75, 5, paint);
myholder.unlockCanvasAndPost(mycanvas);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
System.out.println("surfaceDestroyed方法");
//銷燬時激發,一般在這裏將畫圖的線程停止、釋放。
myholder.unlockCanvasAndPost(canvas);
}
}
運行結果如下: