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.