由于对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); } } }一个简单的棋盘格绘制就完成了,还可以根据传入的参数来显示不同格子数量的棋盘格
