关于SurfaceView类:
SurfaceView 可以直接访问一个画布,提供给需要直接画像素而不是使用窗体部件的应用使用的。每一个SurfaceView创建一个Canvas对象,用来管理View在SurfaceView的绘图操作。
使用SurfaceView时需要实现SurfaceHolder.Callback接口。一下是这个接口的方法:
surfaceChange:在Surface的大小改变时激发。
surfaceCreate:在创建Surface时激发。
surfaceDestroy:在销毁Surface时激发。
addCallback:给SurfaceView添加一个回调函数
lockCanvas:锁定画布,绘图之前必须锁定画布才能得到当前画布对象。
unlockCanvasAndPost:绘制完成之后解锁画布。
RemoveCallback:从SurfaceView中移除回调函数。
****SurfaceView和view明显的不同是:Surface不需要通过线程来更新视图,但在绘制之前必须使用lockCanvas方法来锁定画布,并得到画布,然后在画布上绘制,当绘制完成之后,使用unlockCanvasAndPost方法来解锁画布。这样才能显示在屏幕上。
附上一个例子:
public class TestSurfaceViewActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
setContentView(new Myview(this));
}
//内部类
class Myview extends SurfaceView implements SurfaceHolder.Callback{
SurfaceHolder surfaceHolder;
public Myview(Context context) {
super(context);
surfaceHolder=this.getHolder();
surfaceHolder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
new Thread(new Mythread()).start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
//内部类的内部类实现
class Mythread implements Runnable{
public void run() {
Canvas canvas=surfaceHolder.lockCanvas();
Paint paint=new Paint();
paint.setColor(Color.RED);
canvas.drawRect(new Rect(40, 60, 80, 80), paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}