我在Android项目中使用的是Glide
,我有一个RecyclerView
,其中包含CardView
的列表。我想做的是为每个CardView
加载一个图像,同时显示一个GIF
加载图像,直到真实图像被加载为止。现在,如果它尝试加载GIF
作为主图像,那就没问题了:
Glide.with(context)
.load(R.raw.gif_loading_bar)
.into(imageView);
上面的代码工作正常,并且GIF
被加载。但是,当我尝试加载另一张图片并将GIF
用作占位符Android Studio
时显示错误“可绘制类型的预期资源” :
Glide.with(mContext)
.setDefaultRequestOptions(new RequestOptions()
.placeholder(R.raw.gif_loading_bar))
.load(imageUrl)
.into(imageView);
该如何解决?
答案 0 :(得分:0)
这应该可以完成工作:
ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new
GlideDrawableImageViewTarget(imageView);
Glide.with(context)
.asGif()
.setDefaultRequestOptions(new RequestOptions()
.placeholder(R.raw.gif_loading_bar))
.load(imageUrl)
.into(imageView);
答案 1 :(得分:0)
很遗憾,Glide
不支持this Github issue和this one中提到的GIF
占位符。
答案 2 :(得分:0)
Glide确实支持 GIF 作为占位符。我最近遇到了这种情况,并像下面这样解决了。希望它能帮助像我这样面对这种情况的人。
var builder = Glide.with(mContext).load(path).apply(options).thumbnail(Glide.with(mContext).load(R.raw.loader2))
if (listener == null) {
builder = builder.addListener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
//TODO; your code here
return false
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
//TODO; your code here
return false
}
})
} else {
builder = builder.addListener(listener)
}
builder.into(myImageView)
它做什么
它将gif加载为缩略图,直到从源下载图像为止。 在 onResourceReady 方法中,它将在资源准备就绪时为您提供回调。确保将 gif文件放在R.raw 包下,并且不要放在drawable 包下。让我知道您是否遇到任何问题。