Android 9.0. Как влияет изменение на новую версию Android на поведение кода в пользовательском imageView? - PullRequest
0 голосов
/ 22 апреля 2020

Первоначально я написал приложение на планшете Samsung Android 4.4 для отображения точек в пользовательском ImageView. Я бы измерял точки в реальном мире в метрах и масштабировал их до размеров ImageView, чтобы отобразить их. Синие точки - это точки интереса, которые масштабируются и отображаются их расстоянием до исходной точки красным цветом. У меня есть зеленая точка, вращающаяся вокруг исходной точки, также масштабированная, и это единственное, что меняется в ImageView. Красные и синие точки были нарисованы только один раз с использованием метода canvas.drawCircle (), но зеленая точка на орбите постоянно перерисовывается при перемещении, а ее предыдущая позиция рисуется чистой точкой.

Вот снимок без каких-либо жестовых манипуляций с ImageView или растровым изображением

В пользовательском ImageView реализованы жесты перетаскивания, поворота и масштабирования.

Проблема в том, что на планшете Android 4.4 масштабирование, вращение или панорамирование не приводят к отклонению орбитальной зеленой точки от масштаба. Это было бы идеально на орбите независимо от изменений матрицы, которые прошла битовая карта. Но при использовании того же кода на планшете Android 9.0 с аналогичным размером экрана зеленая орбитальная точка больше не масштабируется. Если я масштабирую, панорамирую или поворачиваю, зеленая точка вращается только вокруг одной точки в растровом изображении, в то время как исходная точка и другие точки отлично масштабируются с помощью жестов. Я пробовал много разных вещей, включая применение масштаба увеличения и панорамирования дельт к точке, но это не работает как намерение.

Снимок растрового изображения с увеличенным жестом

Кто-нибудь сталкивался с изменениями поведения кода в отношении растровых изображений и ImageViews после обновления до более поздней версии Android?

PS Используя корпоративный код, вы не можете свободно делиться им. Единственное, что изменилось, это Android версия.

1 Ответ

0 голосов
/ 29 апреля 2020

Вы проверяли эту функцию?

https://github.com/MikeOrtiz/TouchImageView/blob/master/touchview/src/main/java/com/ortiz/touchview/TouchImageView.kt#L210 -L220

val zoomedRect: RectF
    get() {
        if (touchScaleType == ScaleType.FIT_XY) {
            throw UnsupportedOperationException("getZoomedRect() not supported with FIT_XY")
        }
        val topLeft = transformCoordTouchToBitmap(0f, 0f, true)
        val bottomRight = transformCoordTouchToBitmap(viewWidth.toFloat(), viewHeight.toFloat(), true)
        val w = getDrawableWidth(drawable).toFloat()
        val h = getDrawableHeight(drawable).toFloat()
        return RectF(topLeft.x / w, topLeft.y / h, bottomRight.x / w, bottomRight.y / h)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...