android中用SurfaceHolder处理SurfaceView的画图
在用SurfaceView进行游戏开发过程中,用到SurfaceHolder来处理它的Canvas上画的效果和动画是必不可少的。用于控制表面,大小,像素等。
Abstract interface to someone holding a display surface. Allows you to control the surface size and format,
edit the pixels in the surface, and monitor changes to the surface. This interface is typically available
through the SurfaceView class.
其中特别要注意以下的几个函数:
abstract void addCallback(SurfaceHolder.Callback callback);
// 给SurfaceView当前的持有者一个回调对象。
abstract Canvas lockCanvas();
// 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
abstract Canvas lockCanvas(Rect dirty);
// 锁定画布的某个区域进行画图等..因为画完图后,会调用下面的unlockCanvasAndPost来改变显示内容。
// 相对部分内存要求比较高的游戏来说,可以不用重画dirty外的其它区域的像素,可以提高速度。
abstract void unlockCanvasAndPost(Canvas canvas);
// 结束锁定画图,并提交改变。

import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class GameView extends SurfaceView implements Callback {public static final String tag = "GameView";// 声明GameThread类实例GameThread gameThread;public GameView(Context context) {super(context);// TODO Auto-generated constructor stub// 获取SurfaceHolderSurfaceHolder surfaceHolder = getHolder();// 添加回调对象surfaceHolder.addCallback(this);// 创建GameThread类实例gameThread = new GameThread(surfaceHolder);}public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stubLog.v(tag, "surfaceChanged");}public void surfaceCreated(SurfaceHolder arg0) {// TODO Auto-generated method stubLog.v(tag, "surfaceCreated");// 启动gameThreadgameThread.start();}public void surfaceDestroyed(SurfaceHolder arg0) {// TODO Auto-generated method stubLog.v(tag, "surfaceDestroyed");// 通过结束run()函数的方法结束gameThread,详见GameThread类的定义gameThread.run = false;}/** * GameThread的定义 *  * @author xingye */class GameThread extends Thread {SurfaceHolder surfaceHolder;// run()函数中控制循环的参数。boolean run = true;public GameThread(SurfaceHolder surfaceHolder) {this.surfaceHolder = surfaceHolder;}@Overridepublic void run() {// TODO Auto-generated method stubint i = 0;while (run) {Log.v(tag, "GameThread");Canvas c = null;try {synchronized (surfaceHolder) {// 我们在屏幕上显示一个计数器,每隔1秒钟刷新一次c = surfaceHolder.lockCanvas();c.drawARGB(255, 255, 255, 255);c.drawText("" + i++, 100, 100, new Paint());Thread.sleep(1000);}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (c != null) {surfaceHolder.unlockCanvasAndPost(c);}}}}}}

更多相关文章

  1. android 画图-----直接引用图像
  2. Android 抽象回调函数以及接口回调更新UI
  3. Android 依赖注入函数库Roboguice(一)
  4. android画图--切割区域
  5. Android中关于外部存储的一些重要函数
  6. Android画图方式

随机推荐

  1. 控件布局_LinearLayout
  2. android v7支持包导入问题,Support Error
  3. android ndk 使用第三方静态库
  4. Android应用开发入门教程(经典版)
  5. Android类库介绍
  6. Android(安卓)bitmap 颜色替换
  7. Android 模拟器(emulator)无法启动AVD解
  8. Android的IPC机制Binder的详解汇总
  9. Android系统信息与安全机制
  10. Android(安卓)动态获取创建与删除文件权