Если ваш код масштабирования увеличивает Canvas, но не перемещает его правильно, я подозреваю, что вы вызываете неправильный метод Canvas.scale ().Кажется, вы используете метод -
scale(float sx, float sy)
, и я думаю, что вам нужно использовать -
scale(float sx, float sy, float px, float py)
sx & sy, очевидно, являются масштабными коэффициентами x & y (я обычно устанавливаюих к тому же значению).px & py - это центральные точки для операции Zoom, например, средняя точка между координатами события MotionEvent.ACTION_DOWN и MotionEvent.ACTION_POINTER_DOWN.
В моем обработчике MotionEvent.ACTION_POINTER_DOWN я вызываю -
midPoint(mid, event);
mid определяется как -
private PointF mid = new PointF();
, а функция midPoint - -
private void midPoint(PointF point, MotionEvent event)
{
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
, поэтому в моем обработчике MotionEvent.ACTION_MOVE я бы назвал -
Canvas.scale(sx, sy, mid.x, mid.y);