![](/img/trans.png)
[英]How to load gif image in placeholder of Glide/Picasso/Ion etc
[英]Glide - Load a GIF as a placeholder
我在我的 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);
我该怎么做才能解决这个问题?
不幸的是, Glide
不支持GIF
占位符,正如这个 Github issue和这个.
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包中。 如果您遇到任何问题,请告诉我。
这应该可以完成这项工作:
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);
只需确保根据您的代码更改getContext()
。 例如,在我的情况下,我将它作为holder.img.getContext()
传递
Glide.with(getContext()).load(item[position])
.thumbnail(Glide.with(getContext()).load(R.drawable.gif_image))
.fitCenter()
.crossFade()
.into(imageView);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.