Android SurfaceView 双缓冲机制
来源:互联网 发布:网络剧排行榜前十名 编辑:程序博客网 时间:2024/05/14 06:44
转自:http://blog.csdn.net/liubingzhao/article/details/5563113
Android中的SurfaceView类就是双缓冲机制。因此,开发游戏时尽量使用SurfaceView而不要使用View,这样的话效率较高,而且SurfaceView的功能也更加完善。为了更容易的了解双缓冲技术,下面介绍用View实现双缓冲的方法。
先概述一下,双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有的图形会知道一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap,显示在屏幕上。具体的实现代码如下:
先贴出View类代码:
- package com.lbz.pack.test;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.graphics.Bitmap.Config;
- import android.graphics.drawable.BitmapDrawable;
- import android.view.KeyEvent;
- import android.view.MotionEvent;
- import android.view.View;
- 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();
- }
- }
- }
- Android SurfaceView 双缓冲机制
- SurfaceView的双缓冲机制
- Android SurfaceView双缓冲绘图
- Android SurfaceView双缓冲绘图
- Android surfaceview双缓冲机制和闪屏的解决方法内附代码详解
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- Android之SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- android 双缓冲机制
- 定时通知(Notification)刷新实现SurfaceView双缓冲机制
- 定时通知(Notification)刷新实现SurfaceView双缓冲机制
- SurfaceView双缓冲
- SurfaceView双缓冲Demo
- SurfaceView 双缓冲应用
- 安装PHP5.2.5@Tomcat6
- 通过代理服务器下载网页
- 如何测试需求?
- jsp页面不编译el表达式的解决方法
- Android的屏幕大小和精度
- Android SurfaceView 双缓冲机制
- IOC 文章推荐
- c# 正则表达式
- .net 读取exchange邮件
- 分享Silverlight/WPF/Windows Phone一周学习导读
- 为函数的传递参数动态分配内存
- 移植linux的配置和ramdisk文件系
- gingerbread
- [摘抄]iphone开发秘籍里面的捕捉屏幕截图代码