放假闲着没事,自己写个小游戏练练手
平时看到的数独小游戏的界面都是直接一个 9 × 9 9\times9 9×9的小方格,这里使用自定义View实现。
重写onDraw()实现自定义界面的显示
@Override public void onDraw(Canvas canvas) { // super.onDraw(canvas); //浅色线条 Paint grayPaint = new Paint(); grayPaint.setColor(Color.GRAY); //深色线条 Paint blackPaint = new Paint(); blackPaint.setStrokeWidth(5); blackPaint.setColor(Color.BLACK); //绘制浅色线条 for (int i = 0; i <= 9; i++) { canvas.drawLine(i*width/9, 0f, i*width/9, height, grayPaint); canvas.drawLine(0, i*height/9, width, i*height/9, grayPaint); } //绘制四条深色线条 canvas.drawLine(width/3, 0f, width/3, height, blackPaint); canvas.drawLine(2*width/3, 0f, 2*width/3, height, blackPaint); canvas.drawLine(0, height/3, width, height/3, blackPaint); canvas.drawLine(0, 2*height/3, width, 2*height/3, blackPaint); //判断是否需要将选中的方块显示 if (showR) { Paint yellowPaint = new Paint(); yellowPaint.setColor(Color.YELLOW); yellowPaint.setAlpha(100); canvas.drawRect(choosedX, choosedY, choosedX+sideLenght, choosedY+sideLenght,yellowPaint ); } }重写onTouchEvent()实现点击事件
//点按事件,显示选中的小方块 @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); if (x >= 0 && x <= width && y >= 0 && y <= height) { showR = true; choosedX = formatPosition(x);; choosedY = formatPosition(y);; } invalidate(); return super.onTouchEvent(event); } //将输入的坐标格式化为小方块左上角的坐标 public float formatPosition(float p){ int tmp = (int)p/(int)sideLenght; return tmp*sideLenght; }