android双缓冲技术实例详解
Android中的SurfaceView类就是双缓冲机制。因此,在进行Android游戏开发时应尽量使用SurfaceView而不要使用View,这样的话效率较高,并且SurfaceView的功能也更加完善。为了更容易的了解双缓冲技术,下面介绍用View实现双缓冲的方法。
在此需要说明一下,双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有的图形绘制到一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap,显示在屏幕上。其具体的实现代码如下:
先贴出View类代码:
packagecom.lbz.pack.test;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Canvas;
importandroid.graphics.Paint;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.drawable.BitmapDrawable;
importandroid.view.KeyEvent;
importandroid.view.MotionEvent;
importandroid.view.View;
publicclassGameViewextendsViewimplementsRunnable
{
/*声明Bitmap对象*/
BitmapmBitQQ=null;
PaintmPaint=null;
/*创建一个缓冲区*/
BitmapmSCBitmap=null;
/*创建Canvas对象*/
CanvasmCanvas=null;
publicGameView(Contextcontext)
{
super(context);
/*装载资源*/
mBitQQ=((BitmapDrawable)getResources().getDrawable(R.drawable.qq)).getBitmap();
/*创建屏幕大小的缓冲区*/
mSCBitmap=Bitmap.createBitmap(320,480,Config.ARGB_8888);
/*创建Canvas*/
mCanvas=newCanvas();
/*设置将内容绘制在mSCBitmap上*/
mCanvas.setBitmap(mSCBitmap);
mPaint=newPaint();
/*将mBitQQ绘制到mSCBitmap上*/
mCanvas.drawBitmap(mBitQQ,0,0,mPaint);
/*开启线程*/
newThread(this).start();
}
publicvoidonDraw(Canvascanvas)
{
super.onDraw(canvas);
/*将mSCBitmap显示到屏幕上*/
canvas.drawBitmap(mSCBitmap,0,0,mPaint);
}
//触笔事件
publicbooleanonTouchEvent(MotionEventevent)
{
returntrue;
}
//按键按下事件
publicbooleanonKeyDown(intkeyCode,KeyEventevent)
{
returntrue;
}
//按键弹起事件
publicbooleanonKeyUp(intkeyCode,KeyEventevent)
{
returnfalse;
}
publicbooleanonKeyMultiple(intkeyCode,intrepeatCount,KeyEventevent)
{
returntrue;
}
/**
*线程处理
*/
publicvoidrun()
{
while(!Thread.currentThread().isInterrupted())
{
try
{
Thread.sleep(100);
}
catch(InterruptedExceptione)
{
Thread.currentThread().interrupt();
}
//使用postInvalidate可以直接在线程中更新界面
postInvalidate();
}
}
}