я использую этот код, чтобы масштабировать свой холст вокруг фокусной точкикак масштабировать с помощью холста
private class MyScaleDetector
extends ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
float focusx=detector.getFocusX();
float focusy=detector.getFocusY();
return super.onScaleBegin(detector);
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
float factor=detector.getScaleFactor();
scale *= factor;
scale = Math.max(0.4f, Math.min(scale, 20.0f));
return true;
}
}
и это код, я использую для масштабирования внутри OnDraw метода
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.scale(scale,scale,focusx,focusy);
}
моя проблема когда я начинаю масштабироваться вокруг точки фокусировки (200 200), например, сначала он начинает двигаться туда, но не увеличивая масштаб, который он начинает уходить от точки. поэтому моя проблема заключается в том, как я масштабируюсь в определенной точке, чтобы эта точка стала центром области просмотра при масштабировании.
Я думаю, что я должен использовать canvas.translate() вместе с ним, но я не знаю, как много я должен перемещать позицию холста x и y при масштабировании.
Edit: изображение ниже суммировать то, что я пытаюсь сказать
thx для деталей, но вы не упомянули, как можно масштабировать вокруг определенной точки, которая является проблемой, я уже знаю, насколько масштабируется, и она отлично работает, я тестировал ее для масштабирования вокруг середины высоты и ширины экрана и он работал очень хорошо, но если я масштабируюсь вокруг другой точки, он начинает идти туда в начале масштабирования, но он начинает уходить от точки, так как вы можете видеть, что мне нужно найти способ, чтобы я мог сделать эту точку фокусировки центр области просмотра при масштабировании – hm9
Вы масштабируете вокруг определенной точки точно так же, как и вы. Чтобы убедиться, что точка остается видимой, немного больше работы, см. Мой обновленный ответ – RabidMutant