Androidデュアルバッファテクノロジー


Androidの
Surface Viewクラスはデュアルバッファメカニズムです.そのため、ゲームを開発する際には、できるだけViewを使わずにSurfaceViewを使うようにすると、効率が高く、SurfaceViewの機能もより充実しています.デュアルバッファリング技術をより容易に理解するために、Viewでデュアルバッファリングを実現する方法について説明します.
まず概説すると、デュアルバッファリングの核心技術は、setBitmapメソッドを使用して、描画するすべてのグラフィックをBitmapに描画することです.つまり、メモリスペースで完了してからdrawBitmapメソッドを呼び出して、このBitmapを画面に表示します.具体的な実装コードは以下の通りです.
 public class GameView extends View implements Runnable
 {
 /*   Bitmap   */
 Bitmap mBitQQ = null;
 Paint mPaint = null;
 /*         */
 Bitmap mSCBitmap = null;
 /*   Canvas   */
 Canvas mCanvas = null;

 public GameView(Context context)
 {
 super(context);
 /*      */
 mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.qq)).getBitmap();
 /*            */
 mSCBitmap=Bitmap.createBitmap(320, 480, Config.ARGB_8888);
 /*   Canvas */
 mCanvas = new Canvas();
 /*         mSCBitmap  */
 mCanvas.setBitmap(mSCBitmap);
 mPaint = new Paint();
 /*  mBitQQ   mSCBitmap  */
 mCanvas.drawBitmap(mBitQQ, 0, 0, mPaint);
 /*      */
 new Thread(this).start();
 }

 public void onDraw(Canvas canvas)
 {
 super.onDraw(canvas);
 /*  mSCBitmap       */
 canvas.drawBitmap(mSCBitmap, 0, 0, mPaint);
 }
 //     
 public boolean onTouchEvent(MotionEvent event)
 {
 return true;
 }
 //       
 public boolean onKeyDown(int keyCode, KeyEvent event)
 {
 return true;
 }





 //       
 public boolean onKeyUp(int keyCode, KeyEvent event)
 {
 return false;
 }
 public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
 {
 return true;
 }

 /**
 *     
 */
 public void run()
 {
 while (!Thread.currentThread().isInterrupted())
 {
 try
 {
 Thread.sleep(100);
 }
 catch (InterruptedException e)
 {
 Thread.currentThread().interrupt();
 }
 //  postInvalidate            
 postInvalidate();
 }
}
}