Android cómo hacer la diapositiva de pantalla de imagen?

Estoy construyendo una galería muy básica en android, muestra la última imagen en la carpeta de la cámara y el usuario puede deslizar hacia la izquierda para ver la anterior.

Terminé una implementación usando un viewpager y un pagerAdapter usando sampleSize para escalar imágenes. Mi problema es que la implementación no es tan eficiente como la aplicación de galería por defecto, cada vez que se desliza una imagen hay que esperar unos 200 ms para la siguiente carga. Así que básicamente mi idea de cómo implementarla no está funcionando.

¿Cómo puedo hacerlo eficientemente, y si es posible con una implementación que permite acercar y alejar más adelante?


Esto parece prometedor, pero no sé cómo implementarlo con los archivos en lugar de drawables http://www.androidviews.net/2012/11/photoview/


EDITAR:

He logrado mejorar la velocidad un poco con photoview (un buscador hackeado), sin embargo, se necesita demasiado para convertir los paths de archivos a bitmaps o drawables.

He intentado estos dos métodos sugeridos por dilix y iDroid Explorer:

// Method A Drawable d = Drawable.createFromPath(imagePath); imageView.setImageDrawable(d); // Method B Bitmap myBitmap = BitmapFactory.decodeFile(imagePath); imageView.setImageBitmap(myBitmap); 

Pero ambos producen error Bitmap too large to be uploaded into a texture . Necesito conseguir la imagen a la imageView lo más rápidamente posible y de alguna manera eludir este error y quizá conseguiré una velocidad decente. Ahora mismo estoy escalando las imágenes y convirtiéndolas en un dibujable, pero no es muy eficiente.

Compruebe este sitio web impresionante: http://www.androidviews.net/ y tal vez esto es lo que quiere: http://www.androidviews.net/2012/11/photoview/

Tiene desplazamiento de página, zoom y panorámica como necesitas Lo he utilizado en mi proyecto con algunas modificaciones y carga de imágenes perezosas. Está funcionando exactamente como usted necesita.

Consulte la documentación oficial para ver un gran ejemplo que le guiará a través del uso de mapas de bits con un viewpager de manera eficiente. Debe utilizar una caché de las imágenes que ya se han cargado y las imágenes deben cargarse fuera del subproceso de interfaz de usuario. También desea escalar la imagen al tamaño mínimo necesario para su visualización (usualmente poderes de dos – tenga en cuenta que la imagen no siempre se escalará a lo que se le pide!) ViewPager también carga imágenes en el fondo para prepararse para el próximo diapositiva, que se establece con el método setOffScreenPageLimit (el valor predeterminado suele ser bueno, creo que es 2.)

https://developer.android.com/training/displaying-bitmaps/index.html

No estoy seguro si tienes la solución correcta o no. Pero si quieres continuar con tu propia implementación con tu enlace dado entonces:

 http://www.androidviews.net/2012/11/photoview/ //this link is given in your question 

Y usted puede ver esto SO para cómo convertir la trayectoria del archivo adentro al drawable. Ahora, obtiene dibujable de su archivo especificado e implementar en el enlace que ha dado.

Creo que el enlace funcionará bien.

No dude en hacer comentarios.

1}

Esto parece prometedor, pero no sé cómo implementarlo con los archivos en lugar de drawables http://www.androidviews.net/2012/11/photoview/

Usted tiene que almacenar no lista de drawables en su adaptador, pero los enlaces a los archivos en su tarjeta SD y luego cargarlo.

2) Pero puedo imaginar que el archivo en vez de drawables no será tan eficiente porque cargar de archivos que usted tiene que analizarlo de la tarjeta del sd.

Creo que puedes ahorrar tiempo al cargar varias imágenes en tu memoria simultáneamente (comprimida) y cuando vas a tu othe imagen ya tendrás la imagen y la memoria y mientras swyping puedes empezar a cargar otra imagen en la memoria.

Al voltear sobre la galería no puede cargar imágenes y cargarlo después de casi detenerse.

Es el principal problema: consumo de memoria vs rendimiento.

ACTUALIZAR

Creo que mejor que explorar esto por sí mismo será explorar el código existente de la galería de google: https://github.com/CyanogenMod/android_packages_apps_Gallery

Como he comprobado – almacenar caché (casi como he dicho sobre la carga de múltiples mapas de bits) y almacenar sólo imágenes redimensionadas – parece ser eficiente.

  • Viñeta en Android
  • ¿Cómo puedo crear efectos de fotos en Android?
  • Cómo convertir una imagen en escala de grises?
  • Cómo desenfocar una parte de la imagen en Android?
  • Implementación del efecto de pintura al óleo en android
  • ¿Es posible cortar un mapa de bits a piezas pequeñas sin cargar toda la cosa en la memoria?
  • Android jpeg pictureCallback en escala de grises Opencv Mat
  • Android Yuv420sp a ARGB en OpenCV
  • Filtro esférico en android
  • Android Asynctask para procesar tramas de video en vivo
  • ¿Cómo mostrar la animación de progreso de carga para alguna imagen?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.