Glide - 加载一个GIF作为占位符

2 人关注

我在我的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);

我应该怎么做才能解决这个问题?

android
image
gif
android-glide
Ameer Taweel
Ameer Taweel
发布于 2018-12-25
4 个回答
Rahul Khurana
Rahul Khurana
发布于 2021-08-13
已采纳
0 人赞同

Glide does support 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,直到图片从源头下载完毕。 在资源准备就绪方法,它将在资源准备好时给你回调。请确保将R.raw下的gif文件包和不在可画的范围内包。如果你遇到任何问题,请告诉我。

Ameer Taweel
Ameer Taweel
发布于 2021-08-13
0 人赞同

不幸的是, Glide 并不支持 GIF 的占位符,正如在 GIF 中提到的那样。 this Github issue ,以及 this one .

Jurij Pitulja
Jurij Pitulja
发布于 2021-08-13
0 人赞同

This should do the job:

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);

More info herehere

图像被加载,但它不会移动,它就像任何静态的 JPG PNG 的图像。
在回答中添加修复
Android Studio 找不到一个名字为 GlideDrawableImageViewTarget 的班级。
你使用的是什么版本的Glide?试试DrawableImageViewTarget,而不是GlideDrawableImageViewTarget。
I'm using version 4.8.0 .
Hello
Hello
发布于 2021-08-13
0 人赞同

只要确保按照你的代码改变 getContext() 就可以了。例如,在我的例子中,我把它作为 holder.img.getContext() 传递。

Glide.with(getContext()).load(item[position])