Je souhaite utiliser la bibliothèque Android Glide
pour télécharger l'image et l'afficher dans ImageView
.
dans la version précédente, nous avons utilisé:
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);
Mais j'ai vu la documentation de Glide:
il dit utiliser
GlideApp.with()
à la place deGlide.with()
ma préoccupation est l’espace manquant, l’erreur, GlideApp et d’autres options.
J'utilise
compile 'com.github.bumptech.glide:glide:4.0.0'
Où est-ce que je me trompe? Avec référence ici
comment GlideApp.with()
a été utilisé ??
L'API est générée dans le même package que AppGlideModule
et est nommée GlideApp
par défaut. Les applications peuvent utiliser l'API en démarrant tous les chargements avec GlideApp.with()
au lieu de Glide.with()
:
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
Essayez d’utiliser 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);
MODIFIER
Si .setDefaultRequestOptions(requestOptions)
ne fonctionne pas, utilisez .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
Voici quelques autres changements dans Glide-4
requestOptions.circleCropTransform();
Cross fades()
GlideDrawableImageViewTarget
in Glide-4GifDrawable
comme paramètre cibleSi vous utilisez les dépendances du paquet Glide compile 'com.github.bumptech.glide:glide:3.7.0'
, utilisez le code ci-dessous.
GlideApp
.with(your context)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_image)
.error(R.drawable.error_image)
.into(myImageView);
Note: Comme dans doc
Images rondes: CircleImageView/CircularImageView/RoundedImageView are connu pour avoir des problèmes avec TransitionDrawable (.crossFade () avec thumbnail () ou .placeholder ()) et avec des GIF animés, utilisez un BitmapTransformation (.circleCrop () sera disponible en v4) ou .dontAnimate () pour résoudre le problème.
Dernière version de mise à jour compile com.github.bumptech.glide:glide:4.1.1
que l'utilisation devrait utiliser le code ci-dessous
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);
Voir la dernière version de glide, corrections de bugs, fonctionnalités
Si vous voulez utiliser GlideApp, vous devez ajouter au processeur d'annotation dependencies
comme sur la capture d'écran.
puis incluez une implémentation AppGlideModule dans votre application:
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
N'oubliez pas l'annotation @GlideModule
..__, alors vous devez créer un projet. Et GlideApp
sera généré automatiquement . J'espère que cela sera toujours utile.
les dépendances
compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
ajouter une implémentation AppGlideModule annotée de manière appropriée
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}
De plus, si vous avez utilisé l'option de la prise, vous devez utiliser l'aperçu de Android Studio 3.0.0 pour éviter les erreurs similaires suivantes.
Erreur: L'exécution a échoué pour la tâche ': app: transformJackWithJackForDebug' . com.Android.jack.ir.JNodeInternalError: Java.lang.Exception: Java.lang.AssertionError: Pas encore implémenté
Nous n'avons pas besoin d'utiliser RequestOptions également.
L'API générée ajoute une classe GlideApp, qui permet d'accéder aux sous-classes RequestBuilder et RequestOptions. La sous-classe RequestOptions contient toutes les méthodes de RequestOptions et toutes les méthodes définies dans GlideExtensions. La sous-classe RequestBuilder permet d'accéder à toutes les méthodes de la sous-classe RequestOptions générée sans avoir à utiliser apply:
Utilisation de Glide : -
Une demande sans l'API générée pourrait ressembler à ceci:
Glide.with(fragment)
.load(url)
.apply(centerCropTransform()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH))
.into(imageView);
Utilisation de GlideApp : -
Avec l'API générée, les appels RequestOptions
peuvent être intégrés:
GlideApp.with(fragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.into(imageView);
Vous pouvez toujours utiliser la sous-classe RequestOptions générée pour appliquer le même jeu d'options à plusieurs chargements, mais la sous-classe RequestBuilder générée peut s'avérer plus pratique dans la plupart des cas.
Travail
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);
Si vous souhaitez utiliser un espace réservé commun partout dans votre application, vous pouvez le faire de cette manière.
Comme nous créons GlideModule à partir de Glide v4, vous pouvez copier/coller cette classe dans votre projet pour pouvoir utiliser la classe GlideApp (Pour plus d'étapes - Suivez ceci) :
@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);
}
}
Vous pouvez donner toutes les options de requête ici pour définir comme default.
En créant cette classe, vous n'avez pas besoin d'utiliser .placeholder
avec GlideApp
, elle s'appliquera automatiquement.
N'hésitez pas à vous connecter si vous rencontrez une erreur.
Je vous remercie.