Android пинч увеличить большое изображение, эффективность памяти без потери деталей
Мое приложение должно отображать несколько изображений с высоким разрешением (около 1900 * 2200 пикселей), поддержка увеличения зума. Чтобы избежать ошибки в памяти, я планирую декодировать изображение, чтобы показать полный экран, используя
options.inSampleSize = scale (scale was calculated as Power of 2 as Document)
(Мой вид, который я использовал, TouchImageView
продолжается от ImageView
)
Итак, я могу быстро загрузить изображение и прокручивать между экранами (изображениями). Однако, когда я зажимаю зум, мое приложение теряет детали из-за масштабированного изображения.
Если я загружаю полное изображение, я не могу быстро загрузить или плавно перетащить, перетащить после увеличения зума.
Затем я пытаюсь загружать только полное изображение, когда пользователь начинает масштабировать, но я все еще не могу перетащить плавное изображение из-за очень большого изображения. Галерея Android может сделать это идеально даже 8Mpx изображений.
Любой может мне помочь. Спасибо заранее
Ответы
Ответ 1
Извините, что ответ на старый вопрос, но я только что закончил изображение, которое показывает изображение из активов или внешнего хранилища с подвыборкой, и загружает плитки с более высоким разрешением из изображения при увеличении изображения. данные для областей экрана не загружаются, он должен избегать исключений из памяти.
https://github.com/davemorrissey/subsampling-scale-image-view
Ответ 2
Я знаю, что вопрос был задан давно, но этот ответ может помочь другим людям, борющимся с этим. У меня была точно такая же проблема. Вы должны использовать WebView
и загружать изображение с ним, даже если это локальное изображение. Например, для загрузки изображения в активах используйте следующее:
// Get a WebView you have defined in your XML layout
WebView webView = (WebView) findViewById(R.id.webView1);
// Fetch the picture in your folders using HTML
String htmlData = "<img src=\"my_image.png\">";
webView.loadDataWithBaseURL("file:///android_asset/", htmlData, "text/html", "utf-8", null);
// Activate zooming
webView.getSettings().setBuiltInZoomControls(true);
Я признаю, что для такой задачи очень странно использовать WebView
, это единственное решение, которое я нашел. По крайней мере, вы никогда не получите исключение OOM.