使用Glide库设置当图片加载完成后进度条消失的可见性

110

嗨,我想为图像添加一个进度条,在图像加载时显示,但当图像加载完成后我想将其设置为隐藏。之前我使用的是Picasso库来实现这一点。但我不知道如何在Glide库中使用它。我知道有一些准备好的资源函数可用,但我不知道如何使用它。有人能帮帮我吗?

Picasso库的代码

Picasso.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
       .into(imageView, new Callback() {
           @Override
           public void onSuccess() {
               progressBar.setVisibility(View.GONE);
           }

           @Override
           public void onError() {
           }
        })
;

现在我该如何使用Glide完成这个任务?

Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
     .into(imageView);

我可以使用 Glide 来加载图像,但如果图像加载完毕后,我要如何在代码中写入 progressBar.setVisibility(View.GONE); 呢?


2
你为什么改用其他库了?Picasso很棒啊。 - tasomaniac
我也建议除非你有充分的理由更换库,否则应坚持使用Picasso。 - Chris
13个回答

2
  1. In xml take progress bar with height & width(match_parent).
  2. Before call below mention method , set progress bar visibility Visible.

    public void setImageWIthProgressBar(Context context, final ImageView imageView, String imageUrl, final ProgressBar progressBar) {
    
            Glide.with(context)
                    .load(imageUrl)
                    .listener(new RequestListener<String, GlideDrawable>() {
                        @Override
                        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                            progressBar.setVisibility(View.GONE);
                            return false;
                        }
    
                        @Override
                        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                            progressBar.setVisibility(View.GONE);
                            return false;
                        }
                    })
                    .into(imageView);
    
        }//setImageWIthProgressBar
    

你的回答与 https://dev59.com/kV8e5IYBdhLWcg3wHnks#31675796 有何不同?此外,第一点是不必要的。 - Hari Ram

0

GlideDrawable在4.x版本中已经被弃用,因此如果您从3.x升级到4.x,请使用Drawable:

           Glide
                .with(this)
                .load(sharedMediaUi.downloadUrl)
                .listener(object: RequestListener<Drawable> {
                    override fun onLoadFailed(
                        e: GlideException?,
                        model: Any?,
                        target: Target<Drawable>?,
                        isFirstResource: Boolean
                    ): Boolean {
                        binding.progressCircular.setVisibility(View.GONE)
                        return false
                    }

                    override fun onResourceReady(
                        resource: Drawable?,
                        model: Any?,
                        target: Target<Drawable>?,
                        dataSource: DataSource?,
                        isFirstResource: Boolean
                    ): Boolean {
                        binding.progressCircular.setVisibility(View.GONE)
                        return false
                    }
                })
                .into(binding.imgMedia)

-2

这是最佳答案,因为它不使用任何像设置可见性以获取所需输出的黑客技巧。

下载进度条的gif并将其命名为progressbargif,然后将其放入drawable文件夹中。

        Glide.with(ctx)
            .load(url)
            .thumbnail(Glide.with(ctx).load(R.drawable.progressbargif))
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .error(R.drawable.image_unavailable)
            .crossFade(200)
            .into(iv);

一旦URL图像加载完成,缩略图就会消失。当缓存的图像加载时,缩略图会立即消失。


4
我认为原因是它没有回答问题:OP已经有一个他喜欢的旋转器。这也违反了Android最佳实践:使用GIF作为旋转器太过时了,并且会显着增加APK文件的大小;将GIF放入drawable中本身就不好,因为它不会被框架加载,最好放在raw或assets中。当应用程序中发生事件时更改可见性是没有问题的,Android就是为此设计的。 - TWiStErRob
1
用户在GIF解码过程中也会看到一个空白的空间,这是异步的而不是立即的。您还将进度条进行了RESULT缓存,这意味着它需要一段时间才能加载。为了提高效率,最好将GIF缓存在SOURCE中;但由于这是本地文件,缓存需要设置为NONE,以免在磁盘上重复,消耗更多的用户空间。 - TWiStErRob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接