Я пытаюсь создать карту объектов. И мне нужно добавить масштабирование. Масштабирование от 1 до любой отлично работает, но в других случаях окно просмотра имеет неправильную позицию.
Полный код просмотра с перемещением окна просмотра https://gist.github.com/FirstSpectr/e54ab64faa429e683e3af9031239362c
class MyView : View {
constructor(ctx: Context) : super(ctx)
constructor(ctx: Context, attrs: AttributeSet) : super(ctx, attrs)
private val paint = Paint()
private val viewPort = PointF()
var scale = 1f
set(newScale) {
val scaleFactor = newScale / scale
val halfWidth = width / 2
val halfHeight = height / 2
viewPort.x = (viewPort.x + halfWidth) * scaleFactor - halfWidth
viewPort.y = (viewPort.y + halfHeight) * scaleFactor - halfHeight
viewPort.x /= scaleFactor
viewPort.y /= scaleFactor
field = newScale
invalidate()
}
override fun onDraw(canvas: Canvas) {
super.onDraw(canvas)
canvas.scale(scale, scale)
paint.color = Color.BLUE
val x = width / 2 - 50 - viewPort.x
val y = height / 2 - 50 - viewPort.y
canvas.drawRect(x, y, x + 100f, y + 100f, paint)
}
}