在surfaceView类开发框架中package y.b;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;/**
* @author yubin
* @version 2012-9-11 上午10:08:22
**/
public class Gamesurfaceview extends SurfaceView implements Callback, Runnable {
// 控制循环
boolean mbLoop = false; SurfaceHolder mSurfaceHolder = null;
int miCount = 0;
int x = 50, y = 50; public Gamesurfaceview(Context context) {
super(context);
// 得到SurfaceHolder实例
mSurfaceHolder = this.getHolder();
// 添加回调函数 创建修改销毁方法
mSurfaceHolder.addCallback(this);
// 只有当该View获得焦点时才会调用onKeyDown方法
this.setFocusable(true);
mbLoop = true;
} @Override
public void run() {
while(mbLoop) {
try {
Thread.sleep(200);
}
catch(Exception e) {
}
synchronized(mSurfaceHolder) {
Draw();
}
}
} private void Draw() {
// 锁定画布,得到Canvas
Canvas canvas = mSurfaceHolder.lockCanvas();
if(miCount < 100) {
miCount++;
}
else {
miCount = 0;
}
// 设置画笔
Paint mpaint = new Paint();
// 设置无锯齿
mpaint.setAntiAlias(true);
mpaint.setColor(Color.BLACK);
// 清屏
canvas.drawRect(0, 0, 320, 480, mpaint);
switch(miCount % 4) {
case 0:
mpaint.setColor(Color.BLUE);
break;
case 1:
mpaint.setColor(Color.GREEN);
break;
case 2:
mpaint.setColor(Color.RED);
break;
case 3:
mpaint.setColor(Color.YELLOW);
break;
default:
mpaint.setColor(Color.WHITE);
break;
}
// 画实心矩形
canvas.drawCircle((320 - 25) / 2, y, 50, mpaint);
// 解锁画布绘制
mSurfaceHolder.unlockCanvasAndPost(canvas);
} // surface创建时激发
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 开启绘图线程
new Thread(this).start();
} // surface改变时激发
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub } // surface销毁时激发
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止循环
mbLoop = false;
}
}他教我这么写
但是我发现在使用back键退出时会报空java.lang.NullPointerException
为什么
到底该这么搞啊?
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;/**
* @author yubin
* @version 2012-9-11 上午10:08:22
**/
public class Gamesurfaceview extends SurfaceView implements Callback, Runnable {
// 控制循环
boolean mbLoop = false; SurfaceHolder mSurfaceHolder = null;
int miCount = 0;
int x = 50, y = 50; public Gamesurfaceview(Context context) {
super(context);
// 得到SurfaceHolder实例
mSurfaceHolder = this.getHolder();
// 添加回调函数 创建修改销毁方法
mSurfaceHolder.addCallback(this);
// 只有当该View获得焦点时才会调用onKeyDown方法
this.setFocusable(true);
mbLoop = true;
} @Override
public void run() {
while(mbLoop) {
try {
Thread.sleep(200);
}
catch(Exception e) {
}
synchronized(mSurfaceHolder) {
Draw();
}
}
} private void Draw() {
// 锁定画布,得到Canvas
Canvas canvas = mSurfaceHolder.lockCanvas();
if(miCount < 100) {
miCount++;
}
else {
miCount = 0;
}
// 设置画笔
Paint mpaint = new Paint();
// 设置无锯齿
mpaint.setAntiAlias(true);
mpaint.setColor(Color.BLACK);
// 清屏
canvas.drawRect(0, 0, 320, 480, mpaint);
switch(miCount % 4) {
case 0:
mpaint.setColor(Color.BLUE);
break;
case 1:
mpaint.setColor(Color.GREEN);
break;
case 2:
mpaint.setColor(Color.RED);
break;
case 3:
mpaint.setColor(Color.YELLOW);
break;
default:
mpaint.setColor(Color.WHITE);
break;
}
// 画实心矩形
canvas.drawCircle((320 - 25) / 2, y, 50, mpaint);
// 解锁画布绘制
mSurfaceHolder.unlockCanvasAndPost(canvas);
} // surface创建时激发
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 开启绘图线程
new Thread(this).start();
} // surface改变时激发
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub } // surface销毁时激发
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// 停止循环
mbLoop = false;
}
}他教我这么写
但是我发现在使用back键退出时会报空java.lang.NullPointerException
为什么
到底该这么搞啊?
解决方案 »
- JNI的一个问题
- 求教各位大虾们关于焦点问题,在线等~~~~~~~~~~~~~~~~~~~
- 帮我解释下录音功能的源码
- 最新的android环境配置问题Eclipse4.2+ADT20.0.0
- 关于MediaPlayer的一个小问题
- 有高手熟悉FragmentActivity,ActivityThread,ActivityManager方面的吗?给些资料或者思路。。555
- 我要提交一个表单到C#开发的一个webservice上面,要怎么实现呢?本人初学者
- 求Andriod 视频教材
- Android 如何调用系统默认的应用程序列表界面,如下图
- Popupwindow问题
- 怎么修改Android源码图库Gallery2的背景
- 关于android 电阻触摸屏校准的疑问
在线程里调用draw方法前加一个判断语句就行
这行报错 canvas为空