下面和大家分享一下SurfaceView在游戏中的用法,这是本人第一次在csdn上写博文,有错误和写的不好的地方,希望大家帮忙纠正,谢谢。
下面看代码:
MySurfaceView.java为自定义SurfaceView的类
package com.guu.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Runnable,SurfaceHolder.Callback{
//小球圆心X坐标
private int x=100;
//小球半径
private int r=15;
//小球圆心Y坐标
private int y=r;
//屏幕高度
private int screenHeight;
//用来控制SurfaceView
private SurfaceHolder holder;
//定义一只画笔
private Paint paint;
//定义一个画布
private Canvas canvas;
//线程是否存活
private boolean isLive;
public MySurfaceView(Context context) {
super(context);
holder=this.getHolder();
//为holder添加监听器
holder.addCallback(this);
paint=new Paint();
//设置焦点
setFocusable(true);
}
/**
* 画图方法
*/
public void myDraw(){
//编辑图像
canvas=holder.lockCanvas();
if(canvas!=null){
try {
//刷屏
canvas.drawColor(Color.BLACK);
//设置画笔颜色为绿色
paint.setColor(Color.GREEN);
//画圆
canvas.drawCircle(x, y, r, paint);
} catch (Exception e) {
e.printStackTrace();
}finally{
//完成图像编辑
holder.unlockCanvasAndPost(canvas);
}
}
}
public void changeLocation(){
//当小球到达屏幕底部时返回开始位置
if(y+r>=screenHeight){
y=r;
}else{
y+=3;
}
}
@Override
public void run() {
while(isLive){
//调用画图方法
myDraw();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
//改变圆心坐标
changeLocation();
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}
//此方法为画面第一次创建的时候调用
@Override
public void surfaceCreated(SurfaceHolder arg0) {
System.out.println("surfaceCreated");
screenHeight=this.getHeight();
isLive=true;
new Thread(this).start();
}
//画面销毁的时候调用
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
isLive=false;
System.out.println("surfaceDestroyed");
}
}
下面是主Activity的代码:
package com.guu.view;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(this));
}
}
运行之后结果就是一个绿色的小球下落的过程