使用Glide库设置完成图像加载后进度条的可见性

Har*_*Ram 80 android imageview android-glide

嗨我想要一个图像的进度条,它将在图像加载时显示,但是当图像加载完成时我想将它设置为消失.早些时候,我正在使用Picasso库.但我不知道如何将它与Glide库一起使用.我知道有一些资源就绪功能,但我不知道如何使用它.谁能帮我?

毕加索图书馆代码

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

           @Override
           public void onError() {
           }
        })
;
Run Code Online (Sandbox Code Playgroud)

现在我如何用Glide做到这一点?

Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
     .into(imageView);
Run Code Online (Sandbox Code Playgroud)

我可以通过Glide加载图像,但是progressBar.setVisibility(View.GONE);如果图像被加载,我怎么能在代码中写一些东西呢?

Yar*_*lav 205

问题相当陈旧,我不知道在那些时候滑行的情况是什么,但是现在可以用听众轻松完成(不像选择的答案中提出的那样正确).

progressBar.setVisibility(View.VISIBLE);
Glide.with(getActivity())
     .load(args.getString(IMAGE_TO_SHOW))
     .listener(new RequestListener<String, GlideDrawable>() {
         @Override
         public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
             return false;
         }

         @Override
         public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
             progressBar.setVisibility(View.GONE);
             return false;
         }
     })
     .into(imageFrame)
;
Run Code Online (Sandbox Code Playgroud)

如果想要自己处理动画之类的东西,则返回true;如果想要滑动以处理它们,则返回false.

  • 考虑在`onException`中隐藏`progressBar`,否则它将无限期地旋转,给出错误的希望.一旦调用`onException`,除了设置传递给`.error()`的内容之外,Glide将不会做任何事情. (13认同)
  • 注意:`.listener`必须在`.into()`之前调用 (5认同)
  • 如果在加载图像之前离开Fragment/Activity,则可能导致NullPointerException. (2认同)

Pau*_*ina 24

如果你想在KOTLIN中这样做,你可以尝试这样:

    Glide.with(context)
            .load(url)
            .listener(object : RequestListener<Drawable> {
                override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
                    //TODO: something on exception
                }
                override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                    Log.d(TAG, "OnResourceReady")
                    //do something when picture already loaded
                    return false
                }
            })
            .into(imgView)
Run Code Online (Sandbox Code Playgroud)

  • 还需要导入Target:`import com.bumptech.glide.request.target.Target` (9认同)

Bry*_*lls 17

我的回答是基于过时的API.请参阅此处获取最新答案.


Ale*_*aos 9

在例外中再次显示条件 ProgressBar

 Glide.with(context)
    .load(image_url)
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            if(e instanceof UnknownHostException)
                progressBar.setVisibility(View.VISIBLE);
            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);
Run Code Online (Sandbox Code Playgroud)


Pra*_*tap 7

上面的解决方案也适用于我,但是当我使用asBitmap()下载图像时.这是行不通的.

我们需要使用BitmapImageViewTarget

Glide.with(this) .load(imageURL)
 .asBitmap()
 .placeholder(R.drawable.bg)
 .into(new BitmapImageViewTarget(imageView) {
            @Override
            public void onResourceReady(Bitmap  drawable, GlideAnimation anim) {
                super.onResourceReady(drawable, anim);
                progressBar.setVisibility(View.GONE);
            }
        });
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 6

不建议使用GlideDrawable,请使用简单的Drawable

RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.placeholder);
requestOptions.error(R.drawable.error);

Glide.with(getContext())
                 .setDefaultRequestOptions(requestOptions)
                 .load(finalPathOrUrl)
                 .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
                            progressBar.setVisibility(View.GONE);
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
                            progressBar.setVisibility(View.GONE);
                            return false;
                        }
                    })
                 .into(mImageView);
Run Code Online (Sandbox Code Playgroud)


And*_*Dev 5

在 Kotlin 中,您可以执行以下操作

Glide.with(context)
            .setDefaultRequestOptions(RequestOptions().placeholder(R.drawable.ic_image_placeholder).error(R.drawable.ic_image_placeholder))
            .load(url)
            .listener(object : RequestListener<Drawable>{
                override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean): Boolean {
                    return false
                }

                override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean): Boolean {
                    return false
                }

            })
            .into(imageView)
Run Code Online (Sandbox Code Playgroud)