- package com.bn.box2d.bheap; //声明包
- import android.graphics.Canvas; //导入相关类
- ......//该处省略了部分导入相关类的代码,读者可以自行查阅随书光盘的源代码
- import android.view.SurfaceView; //导入相关类
- public class GameView extends SurfaceView
- implements SurfaceHolder.Callback{ //创建类
- MyBox2dActivity activity; //成员变量
- Paint paint; //画笔
- DrawThread dt; //绘制线程
- public GameView(MyBox2dActivity activity){ //构造器
- super(activity); //调用父类
- this.activity = activity; //初始化成员变量
- this.getHolder().addCallback(this); //设置生命周期回调接口的实现者
- paint = new Paint(); //创建画笔
- paint.setAntiAlias(true); //打开抗锯齿
- dt=new DrawThread(this); //创建线程对象
- dt.start(); //开启线程
- }
- public void onDraw(Canvas canvas){ //绘制方法
- if(canvas==null){ //判断canvas是否为空
- return; //canvas为空则返回
- }
- canvas.drawARGB(255,255, 255, 255); //设置背景颜色
- for(MyBody mb:activity.bl){ //绘制场景中的物体
- mb.drawSelf(canvas, paint); //绘制球与木块金字塔
- } }
- public void surfaceChanged(SurfaceHolder arg0,int arg1,int arg2,int arg3){ }
- public void surfaceCreated(SurfaceHolder holder) { repaint(); } //创建时被调用
- public void surfaceDestroyed(SurfaceHolder arg0){ } //销毁时被调用
- public void repaint(){
- SurfaceHolder holder=this.getHolder(); //得到回调接口的对象
- Canvas canvas = holder.lockCanvas(); //获取画布
- try{
- synchronized(holder){ //同步处理
- onDraw(canvas); //绘制
- } }catch(Exception e){ //捕获异常
- e.printStackTrace(); //打印堆栈信息
- }finally{
- if(canvas != null){ //判断canvas是否为空
- holder.unlockCanvasAndPost(canvas); //解锁
- } } } }
第10-18行为该类的构造器,在该类的构造器中主要是初始化成员变量,同时创建画笔,打开抗锯齿,创建DrawThread类对象,并开启线程。
第19-26行为绘制方法。首先判断canvas是否为空,如果为空,则返回。然后设置背景颜色为白色。最后再绘制本案例中的球以及木块金字塔。
第27-29行为创建实现回调接口的类必须重写的3个方法。
第30-41行为刷帧方法,首先获得SurfaceHolder的对象,并获取画布,然后使用同步控制绘制方法,最后如果画布不为空,则需要为画布解锁。