繁体   English   中英

Glide - 加载 GIF 作为占位符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM