Я разрабатываю приложение, предназначенное для мониторинга состояния бортовой системы самолета. Приложение выводит на экран некоторую схему расположения элементов + набор датчиков (набор View). У схемы фиксированный размер (4096х4096), формат — PNG.
Что нужно:
1. Вывести схему на экран в реальном размере с возможностью скроллинга;
2. Сделать возможность масштабирования схемы.
Скроллинг у меня реализован с помощью стандартного компонента ScrollView на базе FrameLayout.
Проблемы начинаются при попытке вывода схемы на экран. Для отображения схемы я хотел сделать ImageView и установить для него картинку. Но у OpenGL в Android существует ограничение на размер текстуры — не более 2048х2048 пикселей, так что всю картинку засунуть в один компонент не получилось. Пришлось делать 9 ImageView, выстраивать их плиткой, и нарезать исходное изображение с помощью BitmapRegionDecoder.
Теперь еще нужно делать масштабирование всех этих элементов, и выглядит эта реализация как костыль. Видится мне, есть способ проще.
Может кто сталкивался с подобными задачами и может что посоветовать?
Спасибо за толковую идею!
Реализовал требуемый функционал через WebView + FrameLayout.
В WebView создал дочерний FrameLayout, а уже во FrameLayout добавил все свои View. Получилось неплохо: работает прокрутка во все стороны (пропадает смысл использовать ScrollView), работает масштабирование (Pinch Zoom) — и все без особых тормозов. Единственный минус — не могу никак отследить коэффициент масштабирования WebView, чтобы пропорционально увеличивать собственные View.
Картинку нарезал на тайлы. Для 4096x4096 на реальном устройстве нарезка занимает примерно 10 секунд. В принципе, ее можно вынести в отдельный поток, перезагружая WebView по мере нарезки.