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(); } } }