快速学会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);
}
}
运行结果如下: