由于对UI多种多样的需求,单纯的android给定的控件已经无法满足我们。这个时候我们就需要去自定义控件。就会用到Canvas画布。
在Canvas上,我们想画什么就画什么。
一个简单棋盘格的示例:
首先要创建一个类来继承自View来实现画布;
复写类的Ondraw方法,所有的绘制都在Ondraw里完成;
初始化一个Paint 画笔,来对画布进行绘制。
public class GameView extends View {
private int startX = 0;
private int startY = 0;
private int GRID_NUM;
private int GRID_WIDTH;
private Paint paint = null;
public GameView(Context context,int number) {
super(context);
GRID_NUM = number;
paint = new Paint();//实例化一个画笔
paint.setAntiAlias(true);//设置画笔去锯齿,没有此语句,画的线或图片周围不圆滑
}
public void onDraw(Canvas canvas) {
canvas.drawColor(Color.GREEN);//背景色
paint.setColor(Color.BLUE);//画笔颜色
// 每个格子的宽度
GRID_WIDTH = this.getWidth()/(GRID_NUM-1);
//宽度*各自每行数量=一行格子所占尺寸。屏幕总尺寸-有用尺寸=空白尺寸,空白尺寸/2为每个边所空闲空间
startX = this.getWidth()%(GRID_NUM-1)/2;
startY = startX;
Toast.makeText(getContext(),"各尺寸:"+ GRID_WIDTH+"占用尺寸: " + GRID_NUM*GRID_WIDTH + "总尺寸: " + this.getWidth(),Toast.LENGTH_SHORT).show();
for (int i = 0; i < GRID_NUM; i++) {
canvas.drawLine(startX, startY + i * GRID_WIDTH, startX + (GRID_NUM - 1) * GRID_WIDTH, startY + i * GRID_WIDTH, paint);
canvas.drawLine(startX + i * GRID_WIDTH, startY, startX + i * GRID_WIDTH, startY + (GRID_NUM - 1) * GRID_WIDTH, paint);
}
}
}
一个简单的棋盘格绘制就完成了,还可以根据传入的参数来显示不同格子数量的棋盘格