`
zhouxiaoli521
  • 浏览: 565497 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android双缓冲技术

阅读更多

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.csdn.net/liubingzhao/archive/2010/05/06/5563113.aspx

分享到:
评论
2 楼 zhaopian16 2010-12-17  
可是除了View类,其他的呢?
1 楼 zhaopian16 2010-12-17  
完美!很清晰……

相关推荐

    android双缓冲技术实例详解

    为了更容易的了解双缓冲技术,下面介绍用View实现双缓冲的方法。 在此需要说明一下,双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有的图形绘制到一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap...

    android双缓冲解决图片内存溢出的问题

    总之,通过双缓冲技术和合理的内存管理,我们可以有效地解决Android中因大量图片加载导致的内存溢出问题,提高应用的稳定性和性能。同时,要时刻关注应用的内存使用情况,通过内存分析工具进行监控和优化,确保应用...

    Android采用双缓冲技术实现画板

    【Android 双缓冲技术实现画板】 在Android开发中,为提高图形绘制的效率和避免闪烁,常常会采用双缓冲技术。本篇文章将详细介绍如何在Android中利用双缓冲技术实现一个自定义的画板功能。 1. **双缓冲技术概念** ...

    listview 双缓冲技术

    双缓冲技术是解决这个问题的一种有效方法。 双缓冲技术,简单来说,就是为了解决在连续快速绘制时画面闪烁的问题。在ListView中应用双缓冲,主要是为了提高滚动时的流畅性。通常,我们会创建两个缓冲区:一个用于...

    Android应用源码之VIEW双缓冲与SurfaceView比较-IT计算机-毕业设计.zip

    **双缓冲技术** 双缓冲是一种图形绘制优化技术,主要应用于需要频繁更新视图的场景。在Android的View系统中,双缓冲能够有效避免屏幕闪烁,提高用户体验。当UI需要更新时,它首先在后台缓冲区进行绘制,完成后一次...

    播放PCM音频数据的双缓冲用法

    为了确保音频播放的流畅性和减少延迟,开发者通常会采用双缓冲技术。本文将详细介绍在Windows环境下如何使用双缓冲来播放PCM(Pulse Code Modulation,脉冲编码调制)音频数据。 #### 二、PCM音频数据介绍 PCM是一...

    Android应用源码之VIEW双缓冲与SurfaceView比较.rar

    总之,理解和掌握双缓冲技术以及SurfaceView的使用,对于Android开发者来说至关重要,它们可以帮助我们编写出更流畅、响应更快的应用程序,提升用户体验。源码分析是一个很好的学习途径,可以从实践中理解这些理论...

    异步双缓冲加载图片

    双缓冲是一种图形渲染技术,它使用两个缓冲区交替存储图像数据。在加载新图片时,先加载到一个缓冲区,完成后再切换到另一个缓冲区显示,同时将旧缓冲区释放。这种方法可以避免屏幕闪烁,提高显示的连贯性。在图片...

    安卓Android源码——VIEW双缓冲与SurfaceView比较.zip

    首先,我们来了解一下双缓冲技术。在Android的View绘制过程中,双缓冲是一种优化策略,它通过使用两个缓冲区来减少画面闪烁。当一个缓冲区正在被绘图时,另一个缓冲区则显示在屏幕上。一旦绘图完成,两个缓冲区的...

    android 双缓存画图demo

    当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。  双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个...

    android SurfaceView双缓冲Demo

    本`Demo`着重展示了如何使用`SurfaceView`实现双缓冲技术,以优化图形绘制性能,提高用户体验。 双缓冲是一种图形渲染策略,用于减少屏幕闪烁和图像撕裂现象。在Android的`SurfaceView`中,它通过维护两个缓冲区...

    Android应用源码之VIEW双缓冲与SurfaceView比较.zip

    在Android应用开发中,理解和掌握View的双缓冲技术以及SurfaceView的使用是非常关键的,因为它们直接影响到应用程序的性能和用户体验。本资料包主要探讨了这两个主题,并通过源码分析来帮助开发者深入理解它们的区别...

    双缓冲技术实现Android 画板应用

    拿Android 游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容。 如何实现双缓冲?使用一个Bitmap对象保留之前的画布即可。 package ...

    Android高级应用源码-DrawPanel双缓冲实现画板.zip

    这个源码着重讲解了双缓冲技术在Android自定义View中的应用,以实现流畅的绘图体验。 首先,我们要理解什么是双缓冲技术。在图形编程中,双缓冲是一种优化技术,用于减少屏幕闪烁和图像撕裂现象。它通过在后台创建...

    Android程序研发源码VIEW双缓冲与SurfaceView比较.zip

    **双缓冲技术** 双缓冲是一种优化图形绘制的方法,广泛应用于Android的View系统中。它主要解决的是屏幕闪烁问题。在单缓冲模式下,图形的绘制和显示是同步进行的,当画面快速更新时,用户可能会看到未完成的图像...

Global site tag (gtag.js) - Google Analytics