一、SurfaceView.getHolder
并不常用这种方法
例如:
public class SurfaceViewActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.surfaceview);
SurfaceView surfaceView = (SurfaceView)findViewById(R.id.SurfaceView01);
surfaceView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SurfaceView surfaceView = (SurfaceView)v;
Canvas canvas = surfaceView.getHolder().lockCanvas();//加锁
Paint paint = new Paint();
paint.setColor(Color.WHITE);
canvas.drawText("Hello!",100,100, paint);
surfaceView.getHolder().unlockCanvasAndPost(canvas);
}
});
}
}
二、SurfaceView.Callback
常用会继承SurfaceView类,实现SurfaceHolder.Callback接口,在Callback方法内来描绘。
例如:
public class MyCameraActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
//MySurfaceView
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
public MySurfaceView(Context context) {
super(context);
//SurfaceHolder.addCallback(callback)添加回调函数
getHolder().addCallback(this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Log.d("TEST", "surfaceChanged");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d("TEST", "surfaceChanged");
Canvas canvas = holder.lockCanvas();
Paint paint = new Paint();
canvas.drawColor(Color.WHITE);
paint.setColor(Color.BLUE);
paint.setAntiAlias(true); //设置画笔的锯齿效果
paint.setTextSize(24);
canvas.drawText("Hello,Android SurfaceView!",0,paint.getTextSize(),paint);
holder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d("TEST", "surfaceDestroyed");
}
}
}