Buscar..


Introducción

**** ADVERTENCIA Esta documentación no se mantiene y con frecuencia es inexacta ****

La documentación oficial de Glide es una fuente mucho mejor:

Para Glide v4, consulte http://bumptech.github.io/glide/ . Para Glide v3, consulte https://github.com/bumptech/glide/wiki .

Observaciones

Glide es un marco de administración de medios y carga de imágenes de código abierto rápido y eficiente para Android que envuelve la decodificación de medios, la memoria y el almacenamiento en caché de discos, y la agrupación de recursos en una interfaz simple y fácil de usar.

Glide admite la captura, decodificación y visualización de imágenes fijas de video, imágenes y GIF animados. Glide incluye una API flexible que permite a los desarrolladores conectarse a casi cualquier pila de red.
De manera predeterminada, Glide usa una pila personalizada basada en HttpUrlConnection , pero también incluye bibliotecas de utilidades conectadas al proyecto Volley de Google o a la biblioteca OkHttp de Square .

El objetivo principal de Glide es hacer que el desplazamiento de cualquier tipo de lista de imágenes sea lo más suave y rápido posible, pero Glide también es efectivo para casi cualquier caso en el que necesite buscar, cambiar el tamaño y mostrar una imagen remota.

El código fuente y la documentación adicional están disponibles en GitHub: https://github.com/bumptech/glide

Agrega Glide a tu proyecto

De la documentación oficial :

Con Gradle:

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:4.0.0'
  compile 'com.android.support:support-v4:25.3.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0'
}

Con Maven:

<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>glide</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.google.android</groupId>
  <artifactId>support-v4</artifactId>
  <version>r7</version>
</dependency>
<dependency>
  <groupId>com.github.bumptech.glide</groupId>
  <artifactId>compiler</artifactId>
  <version>4.0.0</version>
  <optional>true</optional>
</dependency>

Dependiendo de su configuración y uso de ProGuard (DexGuard), es posible que también deba incluir las siguientes líneas en su proguard.cfg (consulte la wiki de Glide para obtener más información):

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$**     {
  **[] $VALUES;
  public *;
}

# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

Cargando una imagen

ImageView

Para cargar una imagen desde una URL específica, Uri, ID de recurso o cualquier otro modelo en un ImageView :

ImageView imageView = (ImageView) findViewById(R.id.imageView);
String yourUrl = "http://www.yoururl.com/image.png";

Glide.with(context)
    .load(yourUrl)
    .into(imageView);

Para Uris, reemplace yourUrl con su Uri ( content://media/external/images/1 ). Para Drawables, reemplace yourUrl con su ID de recurso ( R.drawable.image ).

RecyclerView y ListView

En ListView o RecyclerView, puede usar exactamente las mismas líneas:

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
    String currentUrl = myUrls.get(position); 

    Glide.with(context)
        .load(currentUrl)
        .into(myViewHolder.imageView);
}

Si no desea iniciar una carga en onBindViewHolder , asegúrese de clear() cualquier ImageView Glide que esté administrando antes de modificar ImageView :

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
    MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
    String currentUrl = myUrls.get(position); 

    if (TextUtils.isEmpty(currentUrl)) {
        Glide.clear(viewHolder.imageView);
        // Now that the view has been cleared, you can safely set your own resource
        viewHolder.imageView.setImageResource(R.drawable.missing_image);
    } else {
        Glide.with(context)
            .load(currentUrl)
            .into(myViewHolder.imageView);
    }
}

Transformación del círculo deslizante (Cargar imagen en una vista de imagen circular)

Crea una imagen de círculo con deslizamiento.

public class CircleTransform extends BitmapTransformation {

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

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

    private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
        if (source == null) return null;

        int size = Math.min(source.getWidth(), source.getHeight());
        int x = (source.getWidth() - size) / 2;
        int y = (source.getHeight() - size) / 2;

        Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);

        Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
        if (result == null) {
            result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(result);
        Paint paint = new Paint();
        paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
        paint.setAntiAlias(true);
        float r = size / 2f;
        canvas.drawCircle(r, r, r, paint);
        return result;
    }

    @Override public String getId() {
        return getClass().getName();
    }
}

Uso:

Glide.with(context)
    .load(yourimageurl)
    .transform(new CircleTransform(context))
    .into(userImageView);

Transformaciones por defecto

Glide incluye dos transformaciones predeterminadas, ajuste centro y centro de recorte.

Centro de ajuste:

Glide.with(context)
    .load(yourUrl)
    .fitCenter()
    .into(yourView);

El centro de ajuste realiza la misma transformación que ScaleType.FIT_CENTER de Android.

Cultivo central:

Glide.with(context)
    .load(yourUrl)
    .centerCrop()
    .into(yourView);

El recorte central realiza la misma transformación que el ScaleType.CENTER_CROP de Android.

Para más información, vea la wiki de Glide .

Imagen de esquinas redondeadas con objetivo Glide personalizado

Primero haga la clase de utilidad o use este método en la clase necesaria

public class UIUtils {
public static BitmapImageViewTarget getRoundedImageTarget(@NonNull final Context context, @NonNull final ImageView imageView,
                                                        final float radius) {
    return new BitmapImageViewTarget(imageView) {
        @Override
        protected void setResource(final Bitmap resource) {
            RoundedBitmapDrawable circularBitmapDrawable =
                    RoundedBitmapDrawableFactory.create(context.getResources(), resource);
            circularBitmapDrawable.setCornerRadius(radius);
            imageView.setImageDrawable(circularBitmapDrawable);
        }
    };
}

Cargando imagen:

Glide.with(context)
     .load(imageUrl)
     .asBitmap()
     .into(UIUtils.getRoundedImageTarget(context, imageView, radius));

Aunque usas asBitmap () las animaciones se eliminarán. Puedes usar tu propia animación en este lugar usando el método animate ().

Ejemplo con fundido similar a la animación predeterminada de deslizamiento.

Glide.with(context)
     .load(imageUrl)
     .asBitmap()
     .animate(R.anim.abc_fade_in)
     .into(UIUtils.getRoundedImageTarget(context, imageView, radius));

Tenga en cuenta que esta animación es un recurso privado de la biblioteca de soporte; no se recomienda su uso, ya que puede cambiarse o incluso eliminarse.

Tenga en cuenta que también necesita tener una biblioteca de soporte para usar RoundedBitmapDrawableFactory

Precarga de imagenes

Para precargar imágenes remotas y asegurarse de que la imagen solo se descarga una vez:

Glide.with(context)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
    .preload();

Entonces:

Glide.with(context)
    .load(yourUrl)
    .diskCacheStrategy(DiskCacheStrategy.SOURCE) // ALL works here too
    .into(imageView);

Para precargar imágenes locales y asegurarse de que haya una copia transformada en la memoria caché del disco (y quizás en la memoria caché):

Glide.with(context)
    .load(yourFilePathOrUri)
    .fitCenter() // Or whatever transformation you want
    .preload(200, 200); // Or whatever width and height you want

Entonces:

Glide.with(context)
    .load(yourFilePathOrUri)
    .fitCenter() // You must use the same transformation as above
    .override(200, 200) // You must use the same width and height as above
    .into(imageView);

Marcador de posición y manejo de errores

Si desea agregar un Drawable que se muestra durante la carga, puede agregar un marcador de posición:

Glide.with(context)
    .load(yourUrl)
    .placeholder(R.drawable.placeholder)
    .into(imageView);

Si desea que se muestre un Drawable si la carga falla por algún motivo:

Glide.with(context)
    .load(yourUrl)
    .error(R.drawable.error)
    .into(imageView);

Si desea que se muestre un Drawable si proporciona un modelo nulo (URL, Uri, ruta de archivo, etc.):

Glide.with(context)
    .load(maybeNullUrl)
    .fallback(R.drawable.fallback)
    .into(imageView);

Cargar imagen en un ImageView circular sin transformaciones personalizadas.

Cree un BitmapImageViewTarget personalizado para cargar la imagen en:

public class CircularBitmapImageViewTarget extends BitmapImageViewTarget
{
    private Context context;
    private ImageView imageView;

    public CircularBitmapImageViewTarget(Context context, ImageView imageView)
    {
        super(imageView);
        this.context = context;
        this.imageView = imageView;
    }
    
    @Override
    protected void setResource(Bitmap resource)
    {
        RoundedBitmapDrawable bitmapDrawable = RoundedBitmapDrawableFactory.create(context.getResources(), resource);
        bitmapDrawable.setCircular(true);
        imageView.setImageDrawable(bitmapDrawable);
    }
}

Uso:

Glide
    .with(context)
    .load(yourimageidentifier)
    .asBitmap()
    .into(new CircularBitmapImageViewTarget(context, imageView));

Falló la carga de la imagen de Glide

Glide
        .with(context)
        .load(currentUrl)
        .into(new BitmapImageViewTarget(profilePicture) {
    @Override
    protected void setResource(Bitmap resource) {
        RoundedBitmapDrawable circularBitmapDrawable =
                RoundedBitmapDrawableFactory.create(context.getResources(), resource);
        circularBitmapDrawable.setCornerRadius(radius);
        imageView.setImageDrawable(circularBitmapDrawable);
    }

    @Override
    public void onLoadFailed(@NonNull Exception e, Drawable errorDrawable) {
        super.onLoadFailed(e, SET_YOUR_DEFAULT_IMAGE);
        Log.e(TAG, e.getMessage(), e);
    }
});

Aquí, en SET_YOUR_DEFAULT_IMAGE , puede establecer cualquier Drawable predeterminado. Esta imagen se mostrará si falla la carga de la imagen.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow