设置使用Glide库完成图像加载后进度条的可见性
嗨我想要一个图像的进度条,它将在图像加载时显示,但是图像加载完成后会显示我想将其设置为消失。早些时候,我为此使用了毕加索图书馆。但我不知道如何将它与Glide库一起使用。我有想法,有一些资源就绪功能,但我不知道如何使用它。谁能帮我?设置使用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() {
}
})
;
现在,我怎么能做到这一点与滑翔码?
Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
.into(imageView);
我能够通过这个与滑翔加载图像,但我怎么可以在代码编写progressBar.setVisibility(View.GONE);
的地方,如果图像获取加载?
问题是相当老了,我不知道什么是与这些次下滑的局面,但现在它可以用监听器(很容易做到不提议在选择的答案中是正确的)。
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)
;
如果想自己处理动画等事情,并且如果想要滑动以处理它们,则返回false。
这比接受的答案更好 – Frank 2015-08-26 10:28:47
考虑在'onException'中隐藏'progressBar',否则它会无限期地旋转,给出虚假的希望。一旦调用'onException',除了设置传递给'.error()'的内容之外,Glide将不会做任何事情。 – TWiStErRob 2015-10-21 10:36:19
如果您在图像加载前离开片段/活动,则可能会导致NullPointerException。 – aProperFox 2016-03-03 20:25:48
我的回答是基于过时的API。请参阅here了解更新的答案。
'。listener()'更好,因为你会收到更多关于你的负载(模型,内存缓存......)的信息,所以更容易决定更多的定制逻辑。 'RequestListener'也更稳定,重写哪个'Target'创建不会给你未来修复的好处。您也可以轻松创建一个'VisibilityListener
上面的解决方案对我来说也很好,但是当我使用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);
}
});
查看我的评论:http://stackoverflow.com/questions/26054420/set-visibility-of-progress-bar-gone-on-completion-of-image-loading-using-glide-l#comment54315331_26066582。这个答案很好地证明了我在那里所说的。 – TWiStErRob 2015-10-21 10:42:43
异常投入了条件再次显示了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);
这是最好的答案,因为它不使用任何黑客,如设置可见性,以获得所需的输出。
下载进度条的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图像加载,缩略图就会消失。加载缓存图像时,缩略图会立即消失。
之前调用。为什么此答案downvoted ? – suku 2017-02-15 15:53:53
我认为这是因为它没有回答这个问题:OP已经有了一个他很满意的微调器。这也违背了Android的最佳做法:使用GIF作为微调器是90年代,并显着增加APK的大小;并且将GIF放入'drawable'本身就不好,因为它没有被框架加载,它应该最好是'raw'或'assets'。在应用中发生事件时更改可见性没有任何问题,Android是为此设计的。 – TWiStErRob 2017-03-05 12:32:33
当GIF解码发生时,用户也会看到一个空的空间,它是异步的而不是立即的。你也是'结果' - 缓存进度条,这意味着它需要一段时间才能加载。为了提高效率,GIF应该是“SOURCE”缓存的;但由于这是一个本地文件,所以缓存需要为'NONE',不能在磁盘上复制它,消耗更多的用户空间。 – TWiStErRob 2017-03-05 12:39:52
- xml取高度为& width(match_parent)的进度条。
-
在调用下面的提及方法之前,设置进度条的可见性可见。
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://stackoverflow.com/a/31675796/3812404有何不同?另外,不需要点1。 – HariRam 2017-05-25 13:15:35
如果你想这样做在科特林,你可以试试这样:
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)
Kotlin版本就像一个魅力 – mrroboaat 2017-12-13 14:35:12
你为什么要改变你的图书馆吗?毕加索很棒。 – tasomaniac 2014-09-26 07:53:11
我也建议坚持毕加索,除非你有充分的理由改变图书馆 – Chris 2014-09-26 08:54:20