Android

Android 的 SurfaceView是一个给人直接处理像素的类!简单关于Callback和SurfaceHolder的东西就不说了,这里主要讲一下SurfaceView的双缓冲下脏区域画图。

因为SurfaceView是双缓冲的,这就说明它其实控制着2个Bitmap,但你对脏区域进行重画时,要对每一个Bitmap都画一次,所以同一个图片要画2次。

public class GameCanvas extends SurfaceView implements Callback, Runnable {

private SurfaceHolder holder;
private Thread thread;
private boolean isFirstEnterGame;
private int i = 0;
private Paint paint;

public GameCanvas(Context context, AttributeSet attrs) {
super(context, attrs);
thread = new Thread(this);
holder = getHolder();
holder.addCallback(this);
paint = new Paint();
paint.setColor(Color.WHITE);
paint.setStyle(Style.FILL);
isFirstEnterGame = true;
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.start();

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}

@Override
public void run() {
while (true) {
Canvas c = null;
try {
c = holder.lockCanvas();
if (isFirstEnterGame) {
c.drawRect(20, 20, 40, 40, paint);
i+=1;
}
if(i == 2){
isFirstEnterGame = false;
}
} finally {
if (c != null)
holder.unlockCanvasAndPost(c);
}
try {
TimeUnit.MILLISECONDS.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

你可以看到c.drawRect(20, 20, 40, 40, paint);将会被调用2次。
而如果你只画一次,那么就会出现闪屏,因为在两张bitmap交换显示过程中,只有一张图画了矩形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值