Glide-4.0.0 Отсутствует местозаполнитель, ошибка, GlideApp и не решает его метод заполнитель, ошибка
Я хочу использовать библиотеку Glide для Android, чтобы загрузить изображение и показать в ImageView
.
В предыдущей версии мы использовали:
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);
Но я видел документацию Glide:
он говорит использовать GlideApp.with()
вместо Glide.with()
Меня беспокоит отсутствие заполнителя, ошибка, GlideApp и другие параметры.
я использую
compile 'com.github.bumptech.glide:glide:4.0.0'
Где я делаю не так? Со ссылкой на здесь.
Как использовался GlideApp.with()
?
API генерируется в том же пакете, что и AppGlideModule
и по умолчанию называется GlideApp
. Приложения могут использовать API, начиная все загрузки с GlideApp.with()
вместо Glide.with()
:
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
Ответы
Ответ 1
Попробуйте использовать 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);
РЕДАКТИРОВАТЬ
Если .setDefaultRequestOptions(requestOptions)
не работает, используйте .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);
РЕДАКТИРОВАТЬ 2 Бонус
Вот некоторые другие изменения в Glide-4
Ответ 2
Если вы используете зависимости пакета Glide, compile 'com.github.bumptech.glide:glide:3.7.0'
, тогда используйте compile 'com.github.bumptech.glide:glide:3.7.0'
команду:
GlideApp
.with(your context)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_image)
.error(R.drawable.error_image)
.into(myImageView);
Примечание: как в документации,
Округлые изображения: известно, что у CircleImageView/CircularImageView/RoundedImageView есть проблемы с TransitionDrawable (.crossFade() с .thumbnail() или .placeholder()) и анимированными GIF файлами, используйте BitmapTransformation (.circleCrop() будет доступно в v4) или .dontAnimate(), чтобы исправить проблему.
В последней обновленной версии compile com.github.bumptech.glide:glide:4.1.1
тогда используйте compile com.github.bumptech.glide:glide:4.1.1
код:
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);
Смотрите последнюю версию Glide, исправления ошибок и функций.
Ответ 3
Если вы хотите использовать GlideApp, вам нужно добавить в процессор аннотаций dependencies
, как на скриншоте:
![How to add GlideApp to your project]()
Затем включите реализацию AppGlideModule в свое приложение:
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
Не забывайте об аннотации @GlideModule
. Тогда вам нужно построить проект. И GlideApp
будет создан автоматически.
Ответ 4
зависимости:
compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
Добавьте соответствующим образом аннотированную реализацию AppGlideModule:
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}
Кроме того, если вы использовали опцию домкрата, чтобы избежать следующих подобных ошибок, вам необходимо использовать предварительный просмотр Android Studio 3.0.0.
Ошибка: не удалось выполнить задачу ': app: transformJackWithJackForDebug'. com.android.jack.ir.JNodeInternalError: java.lang.Exception: java.lang.AssertionError: Еще не реализовано
Ответ 5
Нам также не нужно использовать RequestOptions.
Сгенерированный API добавляет класс GlideApp, который обеспечивает доступ к подклассам RequestBuilder и RequestOptions. Подкласс RequestOptions содержит все методы в RequestOptions и любые методы, определенные в GlideExtensions. Подкласс RequestBuilder обеспечивает доступ ко всем методам в сгенерированном подклассе RequestOptions без использования apply:
Используя Glide:
Запрос без сгенерированного API может выглядеть так:
Glide.with(fragment)
.load(url)
.apply(centerCropTransform()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH))
.into(imageView);
Используя GlideApp:
Сгенерированный API, вызовы RequestOptions
могут быть встроены:
GlideApp.with(fragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.into(imageView);
Вы все еще можете использовать сгенерированный подкласс RequestOptions, чтобы применить один и тот же набор параметров к нескольким загрузкам, но сгенерированный подкласс RequestBuilder может быть более удобным в большинстве случаев.
Ответ 6
За работой
Glide.with(context!!)
.load(user.profileImage)
.apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
.into(edit_profile_image)
Ответ 7
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);
Ответ 8
Если вы хотите использовать общий заполнитель везде в вашем приложении, вы можете сделать это следующим образом:
Поскольку мы создаем GlideModule из Glide v4, вы можете скопировать/вставить этот класс в свой проект, чтобы иметь возможность использовать класс GlideApp (для получения дополнительных шагов выполните следующие действия):
@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);
}
}
Здесь вы можете указать все параметры запроса, чтобы установить их по умолчанию.
Создавая этот класс, вам не нужно использовать .placeholder
с GlideApp
, он будет применен автоматически.