先贴代码
着我们采用surfaceview写
package com.mz.demo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements Callback {
private Paint paint;
private Canvas canvas;
private Bitmap map;
private SurfaceHolder sfh;
private int[][] test_map0 = {
{ 1, 1, 1, 1, 1, 1, 4, 1, 1, 4, 4, 1 },
{ 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 1, 1 },
{ 1, 4, 4, 4, 4, 1, 4, 4, 4, 4, 1, 1 },
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 },
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1 },
{ 1, 4, 4, 4, 4, 4, 1, 1, 4, 3, 1, 4 },
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1 },
{ 1, 4, 4, 4, 1, 4, 1, 4, 4, 4, 4, 1 },
{ 1, 4, 4, 1, 4, 4, 4, 4, 1, 4, 4, 1 },
{ 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 4, 4 },
{ 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 4, 4 }
};
private int mapx = 0;// map地图的唯一坐标
private int mapy = 0;
private int titleW;// 每一个方块的宽度和高度
private int titleH;
private int n=0;// 每一行的方块数量
public MySurfaceView(Context context) {
super(context);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setAntiAlias(true);
// 图片资源初始化
map = BitmapFactory.decodeResource(getResources(), R.drawable.map);
titleW = 32;
titleH = 32;
n = map.getWidth() / titleW;
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
myDraw();
}
private void myDraw() {
// TODO Auto-generated method stub
canvas=sfh.lockCanvas();//实例化
//中间代码绘图过程
//i控制行输出,j控制列输出
for(int i=0;i<test_map0.length;i++){
for(int j=0;j<test_map0[i].length;j++){
canvas.save();
//绘制一个矩形可视区域
canvas.clipRect(j*titleW+mapx, i*titleH+mapy, (j+1)*titleW+mapx, (i+1)*titleH+mapy);
//在每个矩形区域内,将原地图的指定的模块绘制在矩形区域内
canvas.drawBitmap(map, j*titleW+mapx-((test_map0[i][j]-1)%n)*titleW, i*titleH+mapy-((test_map0[i][j]-1)/n)*titleH, paint);
canvas.restore();
}
}
sfh.unlockCanvasAndPost(canvas);//解锁画布
}
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}