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?
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);
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.
Für Glide 4. +
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
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)
....
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.
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
Verwenden Sie GlideDrawableImageViewTarget. Dieser Code funktioniert für mich.
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
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'
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);
}
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);
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>
verwenden Sie statt einer eine 2 ImageViews
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);
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);