Android学习之基于MotionEvent的移动和放缩

2019-12-10 18:41:04于海丽

思路是这样的,我们先在屏幕上按住一个手指,那么,当我们按下第二个手指时,会有一个初始距离,然后我们移动第二个手指并松开,在松开瞬间得到两个手指的新距离,比较初始距离和新距离,来确定是放大还是缩小。 
首先定义一个量来储存初始距离:

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();// 刷新界面