it-swarm.com.de

GIF-Datei mit Glide anzeigen (Bibliothek zum Laden und Cachen von Bildern)

Ich versuche ein GIF-Bild als ladenden Platzhalter in der Bildansicht anzuzeigen - mit Glide Library

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

Ich versuche diese Datei zu zeigen 

loading2.gif

aber erhalte diesen Fehler: 

Fehler: (54, 86) Fehler: Symbolmethode als Gif () kann nicht gefunden werden

Wie kann ich eine GIF-Datei mit Glide in einer ImageView anzeigen? 

39
mahdi

Die obige Antwort hat bei mir nicht funktioniert. Der folgende Code funktioniert. 

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

Für Glide 3.0 müssen Sie asGif () früher einstellen:

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

Beachten Sie, dass durch die Verwendung von load() je nach Datentyp entweder eine GIF oder eine Bitmap geladen wird. Wenn Sie nicht möchten, dass Ihre Last fehlschlägt, wenn die angegebene URL kein GIF ist, müssen Sie nicht asGif() angeben.

20
Sam Judd

Für Glide 4. +

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

Ich hatte das gleiche Problem. Sie können das Problem beheben, indem Sie den Standort derasGif()verschieben. Es muss direkt vor.load()kommen.

Also ändern: 

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

zu 

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

Ab Glide Version v4: 

Abhängigkeit: 

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

Besuchen Sie diesen Link Um eine GlideApp -Klasse zu erstellen:

Sie können direkt auf GlideApp eine Zeichenreferenz angeben.

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

Wenn Sie einen Fehler erhalten, lassen Sie es mich wissen.

1
Pratik Butani

Hier ist ein weiteres Beispiel. Ich habe beobachtet, dass Glide manchmal nicht automatisch Gif spielt. Diese Lösung hat bei mir funktioniert:

Im Beispiel ist imageView eines der Mitglieder der ViewHolder-Klasse von RecyclerView.

Glide.with(itemView.getContext())
    .asGif()
    .load(thumbPath)                             
    .placeholder(ResourcesCompat.getDrawable(context.getResources(), 
                     R.drawable.image_loading_placeholder, null))
    .centerCrop()
    .into(new ImageViewTarget<GifDrawable>(imageView) {
         @Override
         protected void setResource(@Nullable GifDrawable resource) {
             imageView.setImageDrawable(resource);
         }
     });

Die Methode .asGif () muss früher verwendet werden, sonst wird sie nicht erkannt

1
Ram Iyer

Verwenden Sie GlideDrawableImageViewTarget. Dieser Code funktioniert für mich.

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

Versuche dies. Es hat für mich funktioniert und wird auch für Ihren Code funktionieren. Es funktioniert sowohl für Bilder als auch für 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

Glide spielt automatisch animierte gif Dateien ab, es ist keine zusätzliche Methode erforderlich

Verwenden Sie den folgenden Code

Glide.with(this)
   .load(R.drawable.logo)
   .into(imageView);
0
Arpit Jain

Diese Lösung ist eine Art Umgehung

<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. verwenden Sie statt einer eine 2 ImageViews 

  2. Legen Sie das Ladegif in das erste ImageView, indem Sie die von @Preetam angegebene Lösung verwenden

    ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
    GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
    Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);  
    
  3. Bild aus Netzwerk in der zweiten ImageView laden (Reihenfolge ist wichtig, wenn Sie das Ladegif nicht einmal ausblenden möchten Das Bild aus Netzwerk wird geladen

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