2011-02-03 14 views
14

Estoy buscando una biblioteca de ImageViewer que abra una imagen en mi aplicación para un URI determinado (la imagen captada por un servicio web ya está almacenada dentro de mi aplicación en un lugar seguro). Me gusta mucho la actividad de ImageViewer de "Samsung Galaxy S" porque utiliza el zoom de pellizco y "desplazamiento vertical/horizontal". También se escala la imagen muy rápido en mi teléfono Samsung :)Clase de Android ImageViewer compatible con Pinch-Zoom y desplazamiento

Sé que puedo abrir una imagen con la intención de esta manera:

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

El mejor visor adecuado se está llamando, cuando no se encuentra ninguno se genera una ActivityNotFoundException. Así que eso es genial!

Pero el problema es que no tengo permiso para abrir una imagen con una intención externa (por razones de seguridad). Es decir: el usuario no debe tener la posibilidad de guardar la imagen abierta a través de una opción de menú en su tarjeta SD externa o enviar esta imagen a otro servicio (correo electrónico/twitter o s.o.). Así que tengo que escribir mi propia ImageViewer-Class (Activity) que solo se puede llamar dentro de mi aplicación ... Lamentablemente no soy muy hábil en la transformación de imágenes, así que ¿hay algún proyecto de código abierto (o biblioteca) que cubra este caso de uso? ?

Ya le pregunté a google y encontré este http://code.google.com/p/android-pinch/ pero no funcionó muy bien (tampoco tiene funcionalidad de desplazamiento).

Gracias por sus consejos :)

+0

pregunta que también se trata de pellizcar para hacer zoom en android: http://stackoverflow.com/questions/ 2645648/is-there-a-built-in-api-for-handling-piz-zoom-functional-in-android – cimnine

Respuesta

16

La forma más fácil de manejar imágenes está utilizando un WebView, si la imagen se almacena localmente o en línea. WebView admite pellizcar para ampliar y otras funciones.

Ejemplo de 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); 

fuente XML:

<WebView android:id="@+id/yourwebview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
+0

Bueno, esa es una solución increíble, ¡gracias! Funciona de la manera que debería. Aunque tengo que establecer una opción 'wv.setInitialScale (100); 'Me alegro de que sea tan fácil ver una imagen en Android;) ¿La imagen está siendo almacenada en el archivo interno de mi aplicación? ¿O debo llamar a 'wv.getSettings(). SetCacheMode (WebSettings.LOAD_NO_CACHE);'? –

+0

No creo que esté almacenado en el caché ni nada relacionado. – Floern

19

En este momento estoy también uso WebView. Pero esto es conceptualmente incorrecto, WebView no es para mostrar imágenes, sino para mostrar contenido web. WebView es voluminoso y engorroso. Usted restringió la personalización. Por ejemplo, necesito escalar, pero no quiero ver los controles de zoom, o quiero moverlos en otro lugar y luego de forma predeterminada.

Por lo tanto, he buscado sobre este problema y encontrado algunas soluciones:

widget de
  • PhotoView de Chris Banes
  • Además, se puede ver en este tutorial de Sony Ericsson (fuentes disponibles) y puede implementar su propio Reproductor: part1, part2, part3
  • Y otra biblioteca ImageViewZoom en github

ACTUALIZACIÓN

Chris Banes se creó la biblioteca impresionante que soporta gestos para acercar imágenes, ver primer punto por encima de

+0

Sí, funciona "ImageViewZoom", pero solo en el nivel 8+ de la API. – gregn3

+0

ImageViewZoom no admite pellizcar para ampliar. Muy inútil en estos días cuando los usuarios quieren pellizcar con los dedos para acercar una parte de la imagen. – AndroidDev

+1

¡El widget PhotoView de Chris Banes funciona muy bien! –

Cuestiones relacionadas