Ich möchte Glide
Android-Bibliothek verwenden, um ein Bild herunterzuladen und in ImageView
anzuzeigen.
in der vorherigen Version haben wir verwendet:
Glide.with(mContext).load(imgUrl)
.thumbnail(0.5f)
.placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
.error(R.drawable.ERROR_IMAGE_NAME)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
Aber ich habe Glide-Dokumentation gesehen:
es sagt, verwenden Sie
GlideApp.with()
stattGlide.with()
mein Anliegen ist, dass Platzhalter, Fehler, GlideApp und andere Optionen fehlen.
Ich benutze
compile 'com.github.bumptech.glide:glide:4.0.0'
Wo mache ich was falsch? Mit Referenz hier
wie wurde GlideApp.with()
verwendet?
Die API wird im selben Paket wie AppGlideModule
generiert und hat standardmäßig den Namen GlideApp
. Anwendungen können die API verwenden, indem sie alle Ladevorgänge mit GlideApp.with()
anstelle von Glide.with()
starten:
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
Versuchen Sie es mit RequestOptions:
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);
Glide.with(context)
.setDefaultRequestOptions(requestOptions)
.load(url).into(holder.imageView);
EDIT
Wenn .setDefaultRequestOptions(requestOptions)
nicht funktioniert, verwenden Sie .apply(requestOptions)
:
Glide.with(MainActivity.this)
.load(url)
.apply(requestOptions)
.into(imageview);
// or this
Glide.with(MainActivity.this)
.load(url)
.apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
.into(imageview);
// or this
Glide.with(MainActivity.this)
.load(url)
.apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
.into(imageview);
EDIT 2 Bonus
Hier einige weitere Änderungen in Glide-4
requestOptions.circleCropTransform();
Cross fades()
GlideDrawableImageViewTarget
in Glide-4GifDrawable
als ZielparameterWenn Sie Glide-Paketabhängigkeiten compile 'com.github.bumptech.glide:glide:3.7.0'
verwenden, sollten Sie den folgenden Code verwenden
GlideApp
.with(your context)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_image)
.error(R.drawable.error_image)
.into(myImageView);
Hinweis: Wie in doc
Runde Bilder: CircleImageView/CircularImageView/RoundedImageView sind Es ist bekannt, dass Probleme mit TransitionDrawable (.crossFade () mit .thumbnail () oder .placeholder ()) und animierten GIFs auftreten. Verwenden Sie eine BitmapTransformation (.circleCrop () ist in Version 4 verfügbar) oder .dontAnimate (), um das Problem zu beheben.
Die neueste Update-Version compile com.github.bumptech.glide:glide:4.1.1
sollte unter dem folgenden Code verwendet werden
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.default_avatar)
.error(R.drawable.default_avatar)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH)
.dontAnimate()
.dontTransform();
Glide.with(this)
.load(url)
.apply(options)
.into(imageView);
Siehe Neueste Version von glide, Fehlerkorrekturen, Funktionen
Wenn Sie GlideApp verwenden möchten, müssen Sie den Annotationsprozessor dependencies
wie auf dem Screenshot hinzufügen
fügen Sie dann eine AppGlideModule-Implementierung in Ihre Anwendung ein:
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
Vergessen Sie nicht die @GlideModule
-Annotation ..__ Dann müssen Sie ein Projekt erstellen. Und GlideApp
wird automatisch generiert . Hoffe, das ist immer noch hilfreich.
abhängigkeiten
compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
fügen Sie eine entsprechend kommentierte AppGlideModule-Implementierung hinzu
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}
Wenn Sie die Option "Buchse" verwendet haben, müssen Sie außerdem die Android Studio 3.0.0-Vorschau verwenden, um die folgenden ähnlichen Fehler zu vermeiden.
Fehler: Ausführung fehlgeschlagen für Task ': app: transformJackWithJackForDebug' . com.Android.jack.ir.JNodeInternalError: Java.lang.Exception: Java.lang.AssertionError: Noch nicht implementiert
Wir müssen RequestOptions auch nicht verwenden.
Die generierte API fügt eine GlideApp-Klasse hinzu, die den Zugriff auf die Unterklassen RequestBuilder und RequestOptions ermöglicht. Die RequestOptions-Unterklasse enthält alle Methoden in RequestOptions und alle in GlideExtensions definierten Methoden. Die RequestBuilder-Unterklasse ermöglicht den Zugriff auf alle Methoden in der generierten RequestOptions-Unterklasse, ohne dass dazu Folgendes verwendet werden muss:
Glide benutzen : -
Eine Anfrage ohne die generierte API könnte folgendermaßen aussehen:
Glide.with(fragment)
.load(url)
.apply(centerCropTransform()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH))
.into(imageView);
GlideApp verwenden : -
Mit der generierten API können die RequestOptions
-Aufrufe eingebettet werden:
GlideApp.with(fragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.into(imageView);
Sie können die generierte RequestOptions-Unterklasse weiterhin verwenden, um denselben Satz von Optionen auf mehrere Lasten anzuwenden. Die generierte RequestBuilder-Unterklasse ist jedoch in den meisten Fällen praktischer.
Arbeiten
Glide.with(context!!)
.load(user.profileImage)
.apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
.into(edit_profile_image)
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.null_image_profile)
.error(R.drawable.null_image_profile);
//.centerCrop()
//.diskCacheStrategy(DiskCacheStrategy.ALL)
//.priority(Priority.HIGH);
Glide.with(context).load(imageUrl)
.apply(options)
.into(profileImage);
Wenn Sie in Ihrer App überall Platzhalter verwenden möchten, können Sie dies auf diese Weise tun.
Beim Erstellen von GlideModule aus Glide v4 können Sie diese Klasse in Ihr Projekt kopieren/einfügen, sodass Sie die Klasse GlideApp verwenden können (weitere Schritte - Folgen Sie diesem) :
@GlideModule
public class SampleGlideModule extends AppGlideModule {
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
super.applyOptions(context, builder);
builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
}
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
super.registerComponents(context, glide, registry);
}
}
Sie können hier alle Anforderungsoptionen angeben, um sie als default festzulegen.
Wenn Sie diese Klasse erstellen, müssen Sie .placeholder
nicht mit GlideApp
verwenden. Sie wird automatisch angewendet.
Fühlen Sie sich frei, eine Verbindung herzustellen, wenn Sie einen Fehler erhalten.
Vielen Dank.