嗨我想要一个图像的进度条,它将在图像加载时显示,但是当图像加载完成时我想将它设置为消失.早些时候,我正在使用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() { } }) ;
现在我如何用Glide做到这一点?
Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink) .into(imageView);
我可以通过Glide加载图像,但是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) ;
如果想要自己处理动画之类的东西,则返回true;如果想要滑动以处理它们,则返回false.
上面的解决方案也适用于我,但是当我使用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); } });
在例外中再次显示条件 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);
我的回答是基于过时的API.请参阅此处获取最新答案.
不建议使用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);
如果你想在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)