SVG 8k масштаб изображения / перевод - PullRequest
0 голосов
/ 10 июля 2019

У меня svg файл в качестве ресурса. Он содержит около 2000 сложных детальных форм. Большинство фигур являются линиями Безье, которые можно преобразовать в android.graphics.Path. Мне нужно создать экран с функцией масштабирования / перевода для этого изображения.

  1. Я попробовал классический способ:

    val picture = Picture()
    val canvas = picture.beginRecording(svgWidth, svgHeight)
    paths.forEach { canvas.draw(it) }
    picture.endRecording()
    val pictureDrawable = PictureDrawable(picture)
    imageView.setImageDrawable(pictureDrawable)
    

При таком подходе изображение отображается правильно, но в случае масштабирования или увеличения FPS начинает падать до 4-9. На старших устройствах он остается на 25. Так что это не приемлемо.

  1. В качестве второго решения я подготовил асинхронный поставщик кадров с несколькими растровыми слоями. Растровые изображения создаются на основе SVG. Есть слушатель изменения матрицы, который вызывает новый запрос кадра. Во время создания следующего кадра отображается предыдущий кадр, и пользователь может видеть изображение с артефактами в течение 40-100 мс из-за масштабированных растровых изображений. С этим решением FPS составляет 60, но качество изображения во время действий навигации изображения низкое. Это выглядит хорошо и удобно, но далеко от идеала.

Я проверил, как Chrome работает с svg, и похоже, что он отображает сетку растровых изображений, подготовленных асинхронно. Но после масштабирования он опускает предыдущую сетку, и мне нужно обеспечить плавную навигацию. Я ценю любые идеи. Спасибо

пс. На ios UIBezierPath отлично работают с тем же ресурсом.

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