我们知道,在每一个View里有一个onTouchEvent的方法可以重写,这个方法的作用就是能够监控你的手在屏幕上按下、移动、抬起的动作。 public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: break; } return true; } 今天我们介绍的主要是两种操作:五子棋盘的移动和放大缩小。 那么首先我们要画一个五子棋,在View的onDraw方法里,我们直接画线条,这里我们就不多说了: @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 画棋盘 paint.setColor(Color.BLACK); for (int i = 0; i < GobangConfig.num; i++) { canvas.drawLine(GobangConfig.X, GobangConfig.Y + i * GobangConfig.size, GobangConfig.X + (GobangConfig.num - 1) * GobangConfig.size, GobangConfig.Y + i * GobangConfig.size, paint); canvas.drawLine( GobangConfig.X + i * GobangConfig.size, GobangConfig.Y, GobangConfig.X + i * GobangConfig.size, GobangConfig.Y + (GobangConfig.num - 1) * GobangConfig.size, paint); } }
我们今天要做的有两件事情: private float x1, y1, x2, y2;
x1,y1为手指刚刚触摸到屏幕的坐标。 于是我们利用这两个常量和坐标来写棋盘的移动: case MotionEvent.ACTION_DOWN: //获取触碰的坐标 x1 = event.getX(); y1 = event.getY(); break; case MotionEvent.ACTION_MOVE: //获取移动后的坐标 x2 = event.getX(); y2 = event.getY(); //改变棋盘的位置 GobangConfig.X += (x2 - x1); GobangConfig.Y += (y2 - y1); //将新坐标赋给原来触碰的坐标 x1 = x2; y1 = y2; break; 这样就实现了棋盘的移动,然后我们要做的是: 2、棋盘的放大和缩小
我们这里演示的放大和缩小是按照固定比例的,有兴趣的可以根据你两个手指所拉伸的长度来进行放大和缩小。 private float oldPath; 然后我们就可以根据MotionEvent的常量来进行相应的操作: case MotionEvent.ACTION_POINTER_DOWN: float mx = event.getX(1);//参数1代表是第二个手指 float my = event.getY(1); oldPath = (float) Math.sqrt((mx - x1) * (mx - x1) + (my - y1) * (my - y1));// 得到初始距离 break; case MotionEvent.ACTION_POINTER_UP: x = event.getX(0);// 参数0代表第一个按下的手指 y = event.getY(0); mx = event.getX(1);//参数1代表第二个按下的手指 my = event.getY(1); float newPath = (float) Math.sqrt((mx - x1) * (mx - x1) + (my - y1) * (my - y1));// 计算得到新距离 if (oldPath < newPath)// 判断新距离和旧距离 GobangConfig.size = (int) (GobangConfig.size * 1.1);// 放大棋盘 else if (GobangConfig.size > 15)// 棋盘不能过小,否则就无法放大 GobangConfig.size = (int) (GobangConfig.size * 0.9);// 所小棋盘 break; 注意,在这个switch选择以后,一定要加一个: this.invalidate();// 刷新界面 这样就可以实现我们所需要的效果啦,大家如果还有好的想法可以多交流哦! |
|