Android五子棋棋盘的绘制

1.先上效果图




2.绘制步骤

         1.在你要显示的Activity里添加如下几句代码:

public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
		requestWindowFeature(Window.FEATURE_NO_TITLE);		
		
		MySurfaceView msv=new MySurfaceView(this);
		setContentView(msv);
	}
}

将屏幕设成全屏模式,并且无标题形式

创建自己的SurfaceView命名为MySurfaceView用于棋盘的绘制

将屏幕的内容设为MySurfaceView的实例

        2. 定义自己的SurfaceView时要注意继承SurfaceView这个控件并实现Callback接口

3. 添加横屏格子数和竖排格子数等参数

4.在构造函数中获得处理绘画的Holder并设置背景图片。

5.在回调函数surfaceCreated里面绘制横线和竖线,以形成棋盘。代码如下:

/**
 * 线条格数的划分受所在屏幕分辨率的影响而定
 * 本例分辨率参考1024*600【竖屏】
 */
public class MySurfaceView extends SurfaceView implements Callback {
	private Bitmap bm;//背景图片
	private SurfaceHolder sfh;
	private Canvas canvas;
	private float tileW,tileH;//每个格子的宽高
	private int screenW,screenH;//屏幕的宽高
	private static int GRIDW=10,GRIDH=15;//横、纵格子数目
	private static int startW=10,startH=22;//左右上下的内缩距离
	
	public MySurfaceView(Context context) {
		super(context);
		bm=BitmapFactory.decodeResource(getResources(), R.drawable.background);
		sfh=this.getHolder();
		sfh.addCallback(this);
	}
	
	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		screenW=this.getWidth();
		screenH=this.getHeight();
		tileW=(screenW-2*startW)/GRIDW;//宽:(600-2*10)/10=58
		tileH=(screenH-2*startH)/GRIDH;//高:(1024-2*22)/15=65.33……
		canvas=sfh.lockCanvas();
//		canvas.drawColor(Color.WHITE);
		Paint paint=new Paint();
		canvas.drawBitmap(bm, 0, 0, paint);
		
		paint.setColor(Color.GREEN);
		paint.setStrokeWidth(1);
		paint.setStyle(Style.STROKE);
		float startX=0,startY=0;
		for(int i=0;i<GRIDW+1;i++){//横向分隔,线条数=格数+1,画竖线
			startX=startW+i*tileW;
			startY=startH;
			canvas.drawLine(startX, startY, startX, screenH-startH, paint);//(x,y[min])-->(x,y[max])
		}
		for(int i=0;i<GRIDH+1;i++){//纵向分隔,线条数=格数+1,画横线
			startX=startW;
			startY=startH+i*tileH;
			canvas.drawLine(startX, startY, screenW-startW, startY, paint);//(x[min],y)-->(x[max],y)
		}
		if(canvas!=null){
			sfh.unlockCanvasAndPost(canvas);
		}	
	}
	
	@Override
	public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {		
	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
	}
}
3.运行即可看到上述效果图了

发布了15 篇原创文章 · 获赞 1 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览