Android双缓冲技术

本文介绍了如何在Android中使用View类实现双缓冲技术,包括创建Bitmap对象、使用Canvas进行绘图以及通过setBitmap和drawBitmap方法进行双缓冲操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android中的SurfaceView类就是双缓冲机制。因此,开发游戏时尽量使用SurfaceView而不要使用View,这样的话效率较高,而且SurfaceView的功能也更加完善。为了更容易的了解双缓冲技术,下面介绍用View实现双缓冲的方法。

    先概述一下,双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有的图形会知道一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap,显示在屏幕上。具体的实现代码如下:

先贴出View类代码:

 

 

 

  1. package com.lbz.pack.test;   
  2.   
  3. import android.content.Context;   
  4. import android.graphics.Bitmap;   
  5. import android.graphics.Canvas;   
  6. import android.graphics.Paint;   
  7. import android.graphics.Bitmap.Config;   
  8. import android.graphics.drawable.BitmapDrawable;   
  9. import android.view.KeyEvent;   
  10. import android.view.MotionEvent;   
  11. import android.view.View;   
  12.   
  13. public class GameView extends View implements Runnable   
  14. {   
  15.     /* 声明Bitmap对象 */  
  16.     Bitmap  mBitQQ  = null;   
  17.        
  18.     Paint   mPaint = null;   
  19.        
  20.     /* 创建一个缓冲区 */  
  21.     Bitmap  mSCBitmap = null;   
  22.        
  23.     /* 创建Canvas对象 */  
  24.     Canvas mCanvas = null;      
  25.        
  26.     public GameView(Context context)   
  27.     {   
  28.         super(context);   
  29.            
  30.         /* 装载资源 */  
  31.         mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.qq)).getBitmap();   
  32.         /* 创建屏幕大小的缓冲区 */  
  33.         mSCBitmap=Bitmap.createBitmap(320480, Config.ARGB_8888);     
  34.            
  35.         /* 创建Canvas */  
  36.         mCanvas = new Canvas();     
  37.            
  38.         /* 设置将内容绘制在mSCBitmap上 */  
  39.         mCanvas.setBitmap(mSCBitmap);    
  40.            
  41.         mPaint = new Paint();   
  42.            
  43.         /* 将mBitQQ绘制到mSCBitmap上 */  
  44.         mCanvas.drawBitmap(mBitQQ, 00, mPaint);   
  45.            
  46.         /* 开启线程 */  
  47.         new Thread(this).start();   
  48.     }   
  49.        
  50.     public void onDraw(Canvas canvas)   
  51.     {   
  52.         super.onDraw(canvas);   
  53.            
  54.         /* 将mSCBitmap显示到屏幕上 */  
  55.         canvas.drawBitmap(mSCBitmap, 00, mPaint);   
  56.     }   
  57.        
  58.     // 触笔事件   
  59.     public boolean onTouchEvent(MotionEvent event)   
  60.     {   
  61.         return true;   
  62.     }   
  63.   
  64.   
  65.     // 按键按下事件   
  66.     public boolean onKeyDown(int keyCode, KeyEvent event)   
  67.     {   
  68.         return true;   
  69.     }   
  70.   
  71.   
  72.     // 按键弹起事件   
  73.     public boolean onKeyUp(int keyCode, KeyEvent event)   
  74.     {   
  75.         return false;   
  76.     }   
  77.   
  78.   
  79.     public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)   
  80.     {   
  81.         return true;   
  82.     }   
  83.        
  84.        
  85.     /**  
  86.      * 线程处理  
  87.      */  
  88.     public void run()   
  89.     {   
  90.         while (!Thread.currentThread().isInterrupted())   
  91.         {   
  92.             try  
  93.             {   
  94.                 Thread.sleep(100);   
  95.             }   
  96.             catch (InterruptedException e)   
  97.             {   
  98.                 Thread.currentThread().interrupt();   
  99.             }   
  100.             //使用postInvalidate可以直接在线程中更新界面   
  101.             postInvalidate();   
  102.         }   
  103.     }   
  104. }

 

 

http://blog.youkuaiyun.com/liubingzhao/archive/2010/05/06/5563113.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值