我想使用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'
我在哪里做错了?参考here。
GlideApp.with()
是如何使用的?
API与AppGlideModule
在同一个包中生成,默认情况下名为GlideApp
。应用程序可以通过使用GlideApp.with()
而不是Glide.with()
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
答案 0 :(得分:174)
尝试使用 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的其他一些变化
requestOptions.circleCropTransform();
Cross fades()
GlideDrawableImageViewTarget
GifDrawable
作为目标参数答案 1 :(得分:25)
如果你使用Glide包依赖项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);
注意:与the documentation中一样,
圆形图片:CircleImageView / CircularImageView / RoundedImageView是 已知与TransitionDrawable(.crossFade()有问题 .thumbnail()或.placeholder())和动画GIF,使用 BitmapTransformation(.circleCrop()将在v4中提供)或 .dontAnimate()来解决问题。
最新更新版本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, bug fixes and features 的最新版本。
答案 2 :(得分:10)
如果您想使用GlideApp,您必须添加到dependencies
注释处理器,如屏幕截图所示:
然后在您的应用程序中包含AppGlideModule实现:
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}
不要忘记@GlideModule
注释。
然后你需要Build项目。 <{1}}将自动生成。
答案 3 :(得分:6)
依赖关系:
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{}
此外,如果您使用过jack选项,为了避免以下类似错误,您需要使用Android Studio 3.0.0预览。
错误:任务&#39;:app:transformJackWithJackForDebug&#39;执行失败。 com.android.jack.ir.JNodeInternalError:java.lang.Exception:java.lang.AssertionError:尚未实现
答案 4 :(得分: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子类可能更方便。
答案 5 :(得分:4)
工作
Glide.with(context!!)
.load(user.profileImage)
.apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
.into(edit_profile_image)
答案 6 :(得分:1)
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);
答案 7 :(得分:0)
如果您想在应用程序中的所有地方使用通用的占位符,则可以这样操作:
在我们从 Glide v4 创建 GlideModule 时,您可以在您的项目中复制/粘贴此类,以便能够使用 GlideApp 类(有关更多步骤-follow this):
@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
一起使用,它将被自动应用。