web-dev-qa-db-fra.com

Afficher le fichier GIF avec Glide (bibliothèque de chargement et de mise en cache des images)

J'essaie de montrer une image GIF comme espace réservé au chargement dans la vue image - avec Glide Library

Glide.with(context)
    .load(ImageUrl())
    .placeholder(R.drawable.loading2)
    .asGif()
    .crossFade()
    .into(image);

J'essaie de montrer ce fichier 

chargement2.gif

mais obtenez cette erreur: 

Erreur: (54, 86) erreur: impossible de trouver la méthode de symbole asGif ()

Comment afficher un fichier GIF avec Glide dans une imageView? 

39
mahdi

La réponse ci-dessus n'a pas fonctionné pour moi. Le code ci-dessous fonctionne. 

ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
109
Preetam

Pour Glide 3.0, vous devez définir asGif () plus tôt:

Glide.with(context)
    .load(imageUrl)
    .asGif()
    .placeholder(R.drawable.loading2)
    .crossFade()
    .into(imageView);

Gardez à l'esprit que le fait d'utiliser load() chargera un fichier GIF ou Bitmap en fonction du type de données. Sauf si vous voulez que votre charge échoue si l'URL donnée n'est pas un gif, vous n'avez pas besoin de spécifier asGif().

20
Sam Judd

Pour Glide 4. +

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
15
Sachin Thampan

J'ai eu le même problème. Vous pouvez le résoudre en vous déplaçant là où se trouve laasGif(). Il doit venir directement avant.load().

Alors changez: 

Glide.with(context)
    .load(ImageUrl())
    .placeholder(R.drawable.loading2)
    .asGif()  
    ....

à 

Glide.with(context)
     .asGif()         
     .load(ImageUrl())
     .placeholder(R.drawable.loading2)
    ....
10
marc

À partir de la version 4 de Glide: 

Dépendance: 

implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

Visitez ce lien Pour créer la classe GlideApp:

Vous pouvez directement donner une référence tirable sur GlideApp

GlideApp.with(this).load(R.drawable.ic_loader).into(mBinding.progressBar);

Si vous obtenez une erreur, s'il vous plaît faites le moi savoir.

1
Pratik Butani

Utilisez GlideDrawableImageViewTarget. Ce code fonctionne pour moi.

GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);

Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
1
Sukhdeep Saini
Instead of GlideDrawableImageViewTarget use DrawableImageViewTarget     
ImageView imageView =findViewById(R.id.imageView);
     DrawableImageViewTarget imageViewTarget = new DrawableImageViewTarget (imageView);
     Glide.with(this).load(R.raw.image_loader).into(imageViewTarget);

    library: implementation 'com.github.bumptech.glide:glide:4.8.0'
        annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
0
sathish mobapp dev

Essaye ça. Cela a fonctionné pour moi et fonctionnera aussi pour votre code. Cela fonctionne aussi bien pour les images que pour les gifs. 

ImageView imageView = (ImageView) findViewById(R.id.test_image); 
    GlideDrawableImageViewTarget imagePreview = new GlideDrawableImageViewTarget(imageView);
    Glide
            .with(this)
            .load(url)
            .listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {                       
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    return false;
                }
            })
            .into(imagePreview);
}
0
Saket Kumar

Cette solution est un genre de travail autour de

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:id="@+id/ImageContainer"
    Android:background="#fff"
    Android:layout_height="wrap_content">
    <ImageView
        Android:layout_width="wrap_content"
        Android:id="@+id/loadingImageView"
        Android:layout_centerInParent="true"
        Android:layout_height="wrap_content"/>
    <ImageView
        Android:id="@+id/mainImageView"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:scaleType="centerCrop"
        Android:layout_centerInParent="true"
     />
</RelativeLayout>
  1. au lieu d’en utiliser un, utilisez 2 ImageViews 

  2. Mettez le gif de chargement en premier dans ImageView en utilisant la solution donnée par @Preetam

    ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
    GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
    Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);  
    
  3. Charger une image depuis le réseau dans la deuxième image Image (L'ordre est important si vous ne voulez pas masquer le gif de chargement une fois L'image du réseau est chargée)

    ImageView mainImageView = (ImageView) findViewById(R.id.mainImageView);
    GlideDrawableImageViewTarget mainImageViewTarget = new GlideDrawableImageViewTarget(mainImageView);
    Glide.with(this).load(imageUrl).into(mainImageViewTarget);
    
0
Saleem Khan