Как масштабировать центр области просмотра? - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь создать карту объектов. И мне нужно добавить масштабирование. Масштабирование от 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)
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...