martes, 28 de febrero de 2017

Librería Ion para la gestión de imágenes

Ion, al igual que Picasso, es una librería que se utiliza para gestionar las imágenes utilizando técnicas de cacheo. Esto consiste en que la librería se encarga de almacenar/recuperar las imágenes de la memoria volatil o interna del dispositivo o de descargarla de internet en caso necesario. También se encarga de eliminarla cuando ya no la utilizamos. Hasta aquí nada nuevo salvo que esta librería también puede gestionar imágenes gif.
Para usar esta librería lo primero que necesitamos es añadir la siguiente línea a buidl.gradle:
compile 'com.koushikdutta.ion:ion:2.+'

Para descargar una imagen y mostrarla en una ImageView:
Ion.with(context)
     .load("http://example.com/image.png")
     .withBitmap()
     .placeholder(R.drawable.placeholder_image)
     .error(R.drawable.error_image)
     .intoImageView(imageView);
donde
  • load: url desde donde descargaremos la imagen
  • placeholder: (opcional) imagen que aparece en pantalla mientras se descarga la imagen
  • error: (opcional)muestra una imagen de error cuando no se ha podido descargar la imagen
Nota: Existen otras opciones que puedes consultar en GitHub

También se puede descargar directamente:

Ion.with(imageView)
     .placeholder(R.drawable.placeholder_image)
     .error(R.drawable.error_image)
     .load("http://example.com/image.png");

Una forma de gestionar  cuando se ha producida la descarga de la imagen es la siguiente:

Ion.with(getApplicationContext())
     .load("http://example.com/image.png")
     .asBitmap()
     .setCallback(new FutureCallback<Bitmap>() {
          @Override
          public void onCompleted(Exception e, Bitmap result) {
               imageView.setImageBitmap(result);
               // Otras acciones
          }
     });
De esta forma, una vez descargada la imagen, podemos hacer varias acciones como compartirla, guardarla, etc. Por ejemplo, si queremos establecer la imagen como fondo de pantalla:
Ion.with(getApplicationContext())
     .load(hdurl)
     .asBitmap()
     .setCallback(new FutureCallback<Bitmap>() {
          @Override
          public void onCompleted(Exception e, Bitmap result) {
               WallpaperManager wallpaperManager = WallpaperManager.getInstance(getBaseContext());
               try {
                    wallpaperManager.setBitmap(result);
                    Toast.makeText(getApplicationContext(),getResources().getString(R.string.wallpaperOK),Toast.LENGTH_SHORT).show();
               } catch (IOException en) {
                    en.printStackTrace();
               }
          }
     });

Imágenes GIF

Para descargar una imagen GIF utilizamos:

Ion.with(imageView)
     .animateGif(AnimateGifMode.ANIMATE)
     .load("http://example.com/image.gif")
     .withBitmapInfo();


Con este tipo de imágenes no podemos gestionar directamente la descarga de la propia imagen. Para ello, lo que yo hago es una doble descarga de la imagen ya que al utilizar esta librería técnicas de cacheo la segunda descarga se produce de forma inmediata:

Ion.with(getApplicationContext())
     .load("http://example.com/image.gif")
     .asBitmap()
     .setCallback(new FutureCallback<Bitmap>() {
          @Override
          public void onCompleted(Exception e, Bitmap result) {
               Ion.with(imageView)
                    .fitCenter()
                    .animateGif(AnimateGifMode.ANIMATE)
                    .load("http://example.com/image.gif")
                    .withBitmapInfo();
               imageView.setVisibility(View.VISIBLE);
          }
     });

Ion, permite descargar otro tipo de archivos aunque yo, por ahora, solo la he utilizado para la descarga de imágenes. Puedes consultarlo en su documentación de GitHub

Esta librería consume más recursos que Picasso por lo que yo recomiendo utilizarla solo en el caso de descargar imágenes GIF.

Un ejemplo de utilización de esta librería la puedes ver en mi aplicación jAPOD

Fuentes:
GitHub
How to easily get the html of any URL in android studio using Ion library
Creating Splash Screen in Android with Animated Gif Image Example
Android and Ion (HTTP LIB:Library)

No hay comentarios:

Publicar un comentario