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

您好我想有一个图像的进度条,这将显示图像加载时,但图像加载完成后,我想把它设置为消失。 早些时候,我正在使用毕加索图书馆。 但我不知道如何使用Glide库。 我有一些资源就绪function的想法,但我不知道如何使用它。 谁能帮我?

毕加索图书馆的代码

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); 在代码中的某处如果图像被加载?

问题是相当老,我不知道在那个时候下滑的情况是什么,但现在可以很容易地与听众完成(不是select正确的答案build议)。

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

如果你想自己动手处理事情,如果你想滑过来处理它们,你会返回true。

我的回答是基于过时的API。 在这里看到更新的答案。

在例外条件再次显示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); 

上面的解决scheme对我来说工作得很好,但是当我使用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); } }); 
  1. 在xml中带有高度和宽度(match_parent)的进度条。
  2. 在调用下面提到的方法之前,设置进度条的可见性可见。

     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 

如果你想在KOTLIN中做到这一点,你可以试试这种方式:

  Glide.with(context) .load(url) .listener(object : RequestListener<Drawable> { override fun onLoadFailed(p0: GlideException?, p1: Any?, p2: Target<Drawable>?, p3: Boolean): Boolean { TODO("not implemented") //To change body of created functions use File | Settings | File Templates. } override fun onResourceReady(p0: Drawable?, p1: Any?, p2: Target<Drawable>?, p3: DataSource?, p4: Boolean): Boolean { Log.d(TAG, "OnResourceReady") //do something when picture already loaded return false } }) .into(imgView) 

这是最好的答案,因为它不使用任何黑客设置可见性来获得所需的输出。

下载进度条的GIF,并将其称为progressbargif ,并将其放入可绘制文件夹中。

  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图像加载,缩略图消失。 当caching的图像被加载时,缩略图立即消失。