Класс Android ImageViewer с поддержкой Pinch-Zoom и Scrolling

Я ищу библиотеку ImageViewer, которая открывает изображение в моем приложении для заданного URI (изображение, полученное веб-службой, уже хранится в моем приложении в защищенном месте). Мне очень нравится ImageViewer-Activity «Samsung Galaxy S», потому что он использует масштабирование и «прокрутку» по вертикали / горизонтали. Также он очень быстро масштабирует изображение на моем телефоне Samsung :)

Я знаю, что могу открыть изображение с таким намерением:

Intent i = new Intent(Intent.ACTION_VIEW);  
i.setDataAndType(uri, "image/*");
startActivity(i);

Вызывается наиболее подходящее средство просмотра, когда оно не найдено, возникает исключение ActivityNotFoundException. Так что круто!

Но проблема в том, что мне не разрешено открывать изображение с внешним намерением (в целях безопасности). то есть: у пользователя не должно быть возможности сохранить открытое изображение с помощью пункта меню на свою внешнюю SD-карту или отправить это изображение на другой сервис (электронная почта/твиттер и т. д.). Поэтому мне нужно написать свой собственный ImageViewer-Class (Activity), который можно вызывать только в моем приложении... К сожалению, я не очень хорошо разбираюсь в преобразовании изображений, поэтому есть ли какой-либо проект с открытым исходным кодом (или библиотека), который охватывает этот вариант использования?

Я уже спрашивал у Google и нашел этот http://code.google.com/p/android-pinch/, но он не очень хорошо работал (также у него нет функции прокрутки).

Спасибо за ваши советы :)


person tim.kaufner    schedule 03.02.2011    source источник
comment
Вопрос, который также касается масштабирования в Android: functions-in-android" title="Есть ли встроенный API для обработки функции масштабирования в Android"> stackoverflow.com/questions/2645648/   -  person cimnine    schedule 11.08.2011


Ответы (2)


Самый простой способ обработки изображений — использовать WebView, если изображение хранится локально или где-то в сети. WebView поддерживает масштабирование и другие функции.

Пример Java:

String imageUrl = "file:///local/dir/image.jpg"; // http://example.com/image.jpg
WebView wv = (WebView) findViewById(R.id.yourwebview);
wv.getSettings().setBuiltInZoomControls(true);
wv.loadUrl(imageUrl);

XML-источник:

<WebView android:id="@+id/yourwebview"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
person Floern    schedule 03.02.2011
comment
Что ж, отличное решение, спасибо! Он работает так, как должен. Хотя я должен установить один параметр wv.setInitialScale(100); Рад, что its that easy to view an image in android ;) Is the image being stored in the internal db from my application? Or do I have to call wv.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);`? - person tim.kaufner; 03.02.2011
comment
Я не думаю, что он хранится в кеше или чем-то связанном. - person Floern; 03.02.2011

В данный момент я тоже использую WebView. Но это концептуально неверно, WebView предназначен не для отображения изображений, а для отображения веб-контента. WebView громоздкий и громоздкий. Вы ограничили его настройку. Например, мне нужно масштабирование, но я не хочу видеть элементы управления масштабированием или хочу переместить их в другое место, чем по умолчанию.

Поэтому я искал об этой проблеме и нашел несколько решений:

  • Виджет PhotoView от Криса Бейнса
  • Кроме того, вы можете посмотреть это руководство от Sony Ericsson (исходники доступны) и реализовать свой собственный виджет: part1, part2, part3
  • И еще одна библиотека ImageViewZoom на github

ОБНОВИТЬ

Крис Бэйнс создал потрясающую библиотеку, которая поддерживает жесты для масштабирования изображений, см. первый пункт выше.

person Dmitriy Tarasov    schedule 19.07.2012
comment
ImageViewZoom не поддерживает масштабирование щипком. Совершенно бесполезно в наши дни, когда пользователи хотят сжать пальцы, чтобы увеличить часть изображения. - person AndroidDev; 26.07.2013