Chcę użyć biblioteki Glide dla systemu Android, aby pobrać obraz i pokazać go w ImageView
.
W poprzedniej wersji użyliśmy:
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);
Ale widziałem dokumentację Glide:
mówi
GlideApp.with()
zamiast tego użyjGlide.with()
Moim problemem jest brak symbolu zastępczego, błąd, aplikacja GlideApp i inne opcje.
ja używam
compile 'com.github.bumptech.glide:glide:4.0.0'
Gdzie ja robię źle? W nawiązaniu do tutaj .
Jak GlideApp.with()
został użyty?
Interfejs API jest generowany w tym samym pakiecie co AppGlideModule
i jest GlideApp
domyślnie nazwany . Aplikacje mogą korzystać z interfejsu API, uruchamiając wszystkie obciążenia za pomocą GlideApp.with()
zamiast Glide.with()
:
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
android
android-layout
android-glide
Ritesh Bhavsar
źródło
źródło
Odpowiedzi:
Spróbuj użyć 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);
EDYTOWAĆ
Jeśli
.setDefaultRequestOptions(requestOptions)
nie działa, użyj.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);
EDYCJA 2 Bonus
Oto kilka innych zmian w Glide-4
requestOptions.circleCropTransform();
Cross fades()
GlideDrawableImageViewTarget
w Glide-4GifDrawable
jako parametru docelowegoźródło
RequestOptions requestOptions = new RequestOptions().placeholder(R.drawable.ic_placeholder).requestOptions.error(R.drawable.ic_error);
Jeśli używasz zależności pakietu Glide
compile 'com.github.bumptech.glide:glide:3.7.0'
, użyj powinien być poniższy kod:GlideApp .with(your context) .load(url) .centerCrop() .placeholder(R.drawable.loading_image) .error(R.drawable.error_image) .into(myImageView);
Najnowszą zaktualizowaną wersją, którą
compile com.github.bumptech.glide:glide:4.1.1
następnie użyj, powinno być użycie poniższego kodu: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);
Zobacz najnowszą wersję Glide, poprawek błędów i funkcji .
źródło
Jeśli chcesz korzystać z GlideApp, musisz dodać do
dependencies
procesora adnotacji jak na zrzucie ekranu:Następnie umieść w aplikacji implementację AppGlideModule:
@GlideModule public final class MyAppGlideModule extends AppGlideModule {}
Nie zapomnij o
@GlideModule
adnotacji. Następnie musisz zbudować projekt. IGlideApp
zostanie wygenerowany automatycznie.źródło
Zależności:
compile 'com.github.bumptech.glide:glide:4.1.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
Dodaj implementację AppGlideModule z odpowiednią adnotacją:
import com.bumptech.glide.annotation.GlideModule; import com.bumptech.glide.module.AppGlideModule; @GlideModule public final class MyAppGlideModule extends AppGlideModule{}
Ponadto, jeśli użyłeś opcji jack, aby uniknąć następujących podobnych błędów, musisz użyć podglądu Android Studio 3.0.0.
źródło
Nie musimy również używać RequestOptions.
Wygenerowany interfejs API dodaje klasę GlideApp, która zapewnia dostęp do podklas RequestBuilder i RequestOptions. Podklasa RequestOptions zawiera wszystkie metody w RequestOptions i wszystkie metody zdefiniowane w GlideExtensions. Podklasa RequestBuilder zapewnia dostęp do wszystkich metod w wygenerowanej podklasie RequestOptions bez konieczności stosowania apply:
Korzystanie z Glide : -
Żądanie bez wygenerowanego interfejsu API może wyglądać następująco:
Glide.with(fragment) .load(url) .apply(centerCropTransform() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH)) .into(imageView);
Korzystanie z GlideApp : -
Dzięki wygenerowanemu interfejsowi API
RequestOptions
wywołania można wstawiać:GlideApp.with(fragment) .load(url) .centerCrop() .placeholder(R.drawable.placeholder) .error(R.drawable.error) .priority(Priority.HIGH) .into(imageView);
Nadal można używać wygenerowanej podklasy RequestOptions, aby zastosować ten sam zestaw opcji do wielu obciążeń, ale wygenerowana podklasa RequestBuilder może być wygodniejsza w większości przypadków.
źródło
Pracujący
Glide.with(context!!) .load(user.profileImage) .apply (RequestOptions.placeholderOf(R.drawable.dummy_user)) .into(edit_profile_image)
źródło
Jeśli chcesz używać wspólnego symbolu zastępczego wszędzie w aplikacji, możesz to zrobić w następujący sposób:
Ponieważ tworzymy GlideModule z Glide v4 , możesz skopiować / wkleić tę klasę do swojego projektu, abyś mógł używać klasy GlideApp (więcej kroków - wykonaj to) :
@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); } }
Możesz tutaj podać wszystkie opcje żądań, aby ustawić je jako domyślne .
Tworząc tej klasy nie muszą korzystać
.placeholder
zeGlideApp
zostanie on automatycznie zastosowany.źródło
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);
źródło