android中用SurfaceHolder处理SurfaceView的画图

在用SurfaceView进行游戏开发过程中,用到SurfaceHolder来处理它的Canvas上画的效果和动画是必不可少的。用于控制表面,大小,像素等。
Abstract interface to someone holding a display surface. Allows you to control the surface size and format,
edit the pixels in the surface, and monitor changes to the surface. This interface is typically available
through the SurfaceView class.
其中特别要注意以下的几个函数:
abstract void addCallback(SurfaceHolder.Callback callback);
// 给SurfaceView当前的持有者一个回调对象。
abstract Canvas lockCanvas();
// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
abstract Canvas lockCanvas(Rect dirty);
// 锁定画布的某个区域进行画图等..因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。
// 相对部分内存要求比较高的游戏来说,可以不用重画dirty外的其它区域的像素,可以提高速度。
abstract void unlockCanvasAndPost(Canvas canvas);
// 结束锁定画图,并提交改变。

例子:


class DrawThread extends Thread {
private SurfaceHolder holder;
private boolean running = true;
protected DrawThread(SurfaceHolder holder) {this.holder = holder;}
protected void doStop() { running = false; }
public void run() {
Canvas c = null;
while( running ) {
c = holder.lockCanvas(null);
// 锁定整个画布,在内存要求比较高的情况下,建议参数不要为null
try {
synchronized(holder) {
bGrid.drawGrid(c);//画游戏中的网格
BBoom.drawBooms(c, booms); //画游戏中的炸弹
bFairy.drawFairy(c);//画游戏中的主角
// 画的内容是z轴的,后画的会覆盖前面画的。
}
} catch(Exception ex) {}
finally {
holder.unlockCanvasAndPost(c);
//更新屏幕显示内容
}

}
}
};

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值