Carga de imágenes con Glide

Glide es una librería para descargar y guardar en memoria cache las imágenes a mostrar. Ademas posee la facilidad de poder editar la imagen tanto en tamaño como en forma de la misma. Finalmente podemos destacar una características esencial que es la de poder reproducir gif que es la que personalmente me hace querer usar esta librería por sobre Picasso.

Hagamos una comparativa de pros y contras:

Pro:

  1. Puede reproducir Gif
  2. Guarda las imágenes mas comprimidas
  3.  Menor tiempo en mostrar imágenes ya cacheadas
  4. La creación de la instancia puede ser con contexto, fragment, actividad.

Contra:

  1. La cantidad de métodos que inyecta al proyecto es grande alrededor de 2678 lo que nos hace preocuparnos por el limite de 65k
  2.  como librería pesa mas que otras alrededor de 430k

Ahora veamos que es lo que tenemos que hacer para importar la librería, para ello nos dirigiremos a nuestro archivo Gradle y colocamos la dependencia  de Glide

compile 'com.github.bumptech.glide:glide:3.7.0'

con esto ya podemos cargar la imagen con esta simple linea de código

Glide.with(context/activity/fragment)
       .load(url)
       .into(imageView);

si queremos un placeholder mientras carga la imagen podemos agregar la opción .placeholde(resourceimage)

Ahora si queremos hacer una transformación básica como centerCrop podemos agregar la opción .centerCrop(), pero si queremos una modificación un poco mas grande tendremos que usar BitmapTransformation como en el siguiente ejemplo:

public class CircleTransform extends BitmapTransformation{

  public CircleTransform(Context context){
    super(context);
  }

  @Override
  protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight){
    return getCircularBitmapImage(toTransform);
  }

  public static Bitmap getCircularBitmapImage(Bitmap source){
    int size = Math.min(source.getWidth(), source.getHeight());
    int x = (source.getWidth() - size) / 2;
    int y = (source.getHeight() - size) / 2;
    Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
    if (squaredBitmap != source) {
      source.recycle();
    }
    Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    Paint paint = new Paint();
    BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
    paint.setShader(shader);
    paint.setAntiAlias(true);
    float r = size / 2f;
    canvas.drawCircle(r, r, r, paint);
    squaredBitmap.recycle();
    return bitmap;
  }

  @Override
  public String getId(){
    return "Glide_Circle_Transformation";
  }

y lo llamamos así

Glide.with(context).load(url)
.transform(new CircleTransform(context))
.into(holder.imgRecentSearch);

Glide puede provocar caídas en la aplicación si termina de cargar y la actividad fue destruida. Para prevenir esto, podemos hacer las siguientes acotaciones

  1. Usar el contexto de la aplicación: este esta presente mientras la aplicación este abierta o funcionando en background lo cual le da mas tiempo a Glide para cargar la imagen
  2. Llamar a Glide.clear(ImageView) cuando se este seguro que no se necesitará la carga o sepamos que la actividad va a ser destruida
@Override
protected void onDestroy(){
  Glide.clear(imgToShow);
  super.onDestroy();
}

Código ejemplo:  https://github.com/gdg-android-santiago/glide_example;

Video del canal de Google  explicando la reutilización de Bitmap

Url de Glide: https://github.com/bumptech/glide
Url de Picasso: http://square.github.io/picasso/

Mas información de comparativa: https://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

Comenta este post