android双缓冲技术实例详解
程序员文章站
2023-02-02 11:46:20
android中的surfaceview类就是双缓冲机制。因此,在进行android游戏开发时应尽量使用surfaceview而不要使用view,这样的话效率较高,并且su...
android中的surfaceview类就是双缓冲机制。因此,在进行android游戏开发时应尽量使用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(); } } }