基于Android 实现图片平移、缩放、旋转同时进行

2019-12-10 19:53:20于海丽
  • /** 旋轉 */  matrix1.postRotate(rotation, displayWidth / 2, displayHeight / 2); 
  • break;  } 
  • }  /** 
  • * 两个触点的距离  * 
  • * @param event 触摸事件  * @return float 
  • */  private float spacing(MotionEvent event) { 
  • float x = event.getX(0) - event.getX(1);  float y = event.getY(0) - event.getY(1); 
  • return (float) Math.sqrt(x * x + y * y);  } 
  • /**  * 获取旋转角度 
  • */  private float rotation(MotionEvent event) { 
  • double delta_x = (event.getX(0) - event.getX(1));  double delta_y = (event.getY(0) - event.getY(1)); 
  • double radians = Math.atan2(delta_y, delta_x);  return (float) Math.toDegrees(radians); 
  • }  /** 
  • * 两个触点的中间坐标  * 
  • * @param pointM 中间坐标  * @param event 触摸事件 
  • */  private void setMidPoint(PointF pointM, MotionEvent event) { 
  • float x = event.getX(0) + event.getY(1);  float y = event.getY(0) + event.getY(1); 
  • pointM.set(x / 2, y / 2);  } 
  • /**  * 检查约束条件(缩放倍数) 
  • */  private void checkView() { 
  • if (currentScale > 1) {  if (currentScale * matrixScale > maxScale) { 
  • matrix.postScale(maxScale / matrixScale, maxScale / matrixScale, pointM.x, pointM.y);  matrixScale = maxScale; 
  • } else {  matrix.postScale(currentScale, currentScale, pointM.x, pointM.y); 
  • matrixScale *= currentScale;  } 
  • } else {  if (currentScale * matrixScale else { 
  • matrix.postScale(currentScale, currentScale, pointM.x, pointM.y);  matrixScale *= currentScale; 
  • }  }