1. SurfaceView 游戏框架实例
实例效果:就是屏幕上的文本跟着点击的地方移动,效果图如下:
步骤:
新建项目“GameSurfaceView”,首先自定义一个类"MySurfaceView",此类继承SurfaceView,并实现android.view.SurfaceHolder.Callback 接口,代码如下
package com.example.ex4_5; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; //Callback接口用于SurfaceHolder 对SurfaceView 的状态进行监听 public class MySurfaceView extends SurfaceView implements Callback{ //用于控制SurfaceView 的大小、格式等,并且主要用于监听SurfaceView 的状态 private SurfaceHolder sfh; private Paint paint; private int textX=30,textY=30; public MySurfaceView(Context context) { super(context); //实例SurfaceView sfh = this.getHolder(); //为SurfaceView添加状态监听 sfh.addCallback(this); //实例一个画笔 paint = new Paint(); //设置字体大小 paint.setTextSize(30); //设置画笔的颜色 paint.setColor(Color.GREEN); } @Override //当SurfaceView 被创建完成后响应 public void surfaceCreated(SurfaceHolder holder) { myDraw(); } @Override //当SurfaceView 状态发生改变时响应 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override //当SurfaceView 状态被摧毁时响应 public void surfaceDestroyed(SurfaceHolder holder) { } //SurfaceView 是通过SurfaceHolder 来修改其数据,所以即时重写View 的onDraw(Canvas canvas)函数,在SurfaceView 启动时也不会执行到,因此这里自定义绘图函数 public void myDraw() { //获取SurfaceView 的Canvas 对象, //同时对获取的Canvas 画布进行加锁,防止SurfaceView 在绘制过程中被修改、摧毁等发生的状态改变 //另外一个lockCanvas(Rect rect)函数,其中传入一个Rect矩形类的实例,用于得到一个自定义大小的画布 Canvas canvas = sfh.lockCanvas(); //填充背景色,即刷屏,每次在画布绘图前都对画布进行一次整体的覆盖 canvas.drawColor(Color.BLACK); //绘制内容 canvas.drawText("This is a Text !", textX, textY, paint); //解锁画布和提交 sfh.unlockCanvasAndPost(canvas); } //重写触屏监听事件 @Override public boolean onTouchEvent(MotionEvent event) { textX = (int)event.getX(); textY = (int)event.getY(); myDraw(); return super.onTouchEvent(event); } }