Recherche…


Introduction

**** AVERTISSEMENT Cette documentation n'est pas maintenue et souvent inexacte ****

La documentation officielle de Glide est une bien meilleure source:

Pour Glide v4, voir http://bumptech.github.io/glide/ . Pour Glide v3, voir https://github.com/bumptech/glide/wiki .

Remarques

Glide est une infrastructure rapide et efficace de gestion de médias open source et de chargement d'images pour Android qui intègre le décodage des supports, la mémoire et la mise en cache des disques, ainsi que la mise en pool des ressources dans une interface simple et facile à utiliser.

Glide prend en charge l'extraction, le décodage et l'affichage d'images fixes vidéo, d'images et de GIF animés. Glide comprend une API flexible qui permet aux développeurs de se connecter à presque toutes les piles du réseau.
Par défaut, Glide utilise une pile personnalisée basée sur HttpUrlConnection , mais inclut également des bibliothèques d'utilitaires connectées au projet Volley de Google ou à la bibliothèque OkHttp de Square .

L'objectif principal de Glide est de rendre le défilement de toutes les listes d'images aussi fluide et rapide que possible, mais Glide est également efficace dans presque tous les cas où vous devez extraire, redimensionner et afficher une image distante.

Le code source et la documentation supplémentaire sont disponibles sur GitHub: https://github.com/bumptech/glide

Ajouter Glide à votre projet

De la documentation officielle :

Avec 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'
}

Avec 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>

Selon votre configuration et utilisation de ProGuard (DexGuard), vous devrez peut-être également inclure les lignes suivantes dans votre proguard.cfg (voir le wiki de Glide pour plus d'informations):

-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

Chargement d'une image

ImageView

Pour charger une image à partir d'une URL, d'un Uri, d'un ID de ressource ou de tout autre modèle spécifié dans une ImageView :

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

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

Pour Uris, remplacez votre yourUrl par votre Uri ( content://media/external/images/1 ). Pour Drawables, remplacez votre yourUrl par votre identifiant de ressource ( R.drawable.image ).

RecyclerView et ListView

Dans ListView ou RecyclerView, vous pouvez utiliser exactement les mêmes lignes:

@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 vous ne voulez pas démarrer un chargement dans onBindViewHolder , assurez-vous que vous clear() tout ImageView Glide en cours de gestion avant de modifier 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);
    }
}

Transformation du cercle de glissement (Charger l'image dans une image circulaire)

Créez une image circulaire avec la glisse.

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();
    }
}

Usage:

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

Transformations par défaut

Glide comprend deux transformations par défaut, le centre d'ajustement et le recadrage central.

Centre d'ajustement:

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

Le centre d'ajustement effectue la même transformation que ScaleType.FIT_CENTER d'Android.

Centre de récolte:

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

Centrage central effectue la même transformation que ScaleType.CENTER_CROP pour Android.

Pour plus d'informations, voir le wiki de Glide .

Image des coins arrondis avec la cible Glide personnalisée

Commencez par créer une classe utilitaire ou utilisez cette méthode en classe

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);
        }
    };
}

Chargement de l'image:

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

Comme vous utilisez asBitmap (), les animations seront supprimées. Vous pouvez utiliser votre propre animation à cet endroit en utilisant la méthode animate ().

Exemple avec un fondu similaire à celui de l'animation par défaut

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

Veuillez noter que cette animation est la ressource privée de la bibliothèque de support - il est déconseillé de l'utiliser car elle peut changer ou même être supprimée.

Notez que vous devez également avoir une bibliothèque de support pour utiliser RoundedBitmapDrawableFactory

Préchargement d'images

Pour précharger des images distantes et vous assurer que l'image n'est téléchargée qu'une seule fois:

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

Alors:

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

Pour précharger des images locales et vous assurer qu'une copie transformée se trouve dans le cache du disque (et peut-être dans le cache de la mémoire):

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

Alors:

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

Placeholder et gestion des erreurs

Si vous souhaitez ajouter un objet pouvant être dessiné pendant le chargement, vous pouvez ajouter un espace réservé:

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

Si vous souhaitez afficher un Drawable si le chargement échoue pour une raison quelconque:

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

Si vous voulez qu'un Drawable soit affiché si vous fournissez un modèle nul (URL, Uri, chemin de fichier, etc.):

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

Charger l'image dans un ImageView circulaire sans transformations personnalisées

Créez un objet BitmapImageViewTarget personnalisé pour charger l'image dans:

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);
    }
}

Usage:

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

Échec du chargement de l'image Glide de manipulation

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);
    }
});

Ici, à SET_YOUR_DEFAULT_IMAGE place, vous pouvez définir n'importe quel Drawable par défaut. Cette image sera affichée si le chargement de l'image a échoué.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow