Reputation: 87
I have an application receives data (images) from json, I'm trying to show a Progressbar
while image is loaded, but Progressbar
gone before image appears, I want to make progressbar appears while image is loaded I'm using Glide library.
can I make the progress bar visible always behind the image view?
My adapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Post> posts;
private Context context;
private RecyclerViewClickListener mClickListener;
ProgressBar progressBar;
public MyAdapter(List<Post> posts, Context context, RecyclerViewClickListener clickListener) {
this.posts = posts;
this.context = context;
this.mClickListener = clickListener;
}
public List<Post> getItems(){
return posts;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.picture_item,
parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bindModel(posts.get(position));
}
@Override
public int getItemCount() { return posts.size(); }
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Post mPost;
ImageView image;
ViewHolder(View v) {
super(v);
image = (ImageView) itemView.findViewById(R.id.cat_imageView);
progressBar = (ProgressBar) itemView.findViewById(R.id.progress);
progressBar.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
v.setOnClickListener(this);
}
void bindModel(Post post) {
this.mPost = post;
Glide
.with(context)
.load(post.getImgUrl())
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH)
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
}).into(image);
}
@Override
public void onClick(View view) {
mClickListener.onClick(view, mPost);
}
}
}
Upvotes: 1
Views: 316
Reputation: 2847
Use this may help you,
EDIT
Use Glide v-4.2.0
update gradle.build()
compile 'com.github.bumptech.glide:glide:4.2.0'
Then use below code this is working for me
Glide.with(context)
.load((post.getImgUrl()))
.apply(new RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH))
.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(image);
see the image below
Upvotes: 1
Reputation: 973
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
**progressBar.setVisibility(View.GONE);**
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
**image.setImageBitmap(resource);**
return false;
}
});
Instead of using Glide method into()...try to use bitmap which you get in onResourceReady() and set into imageview. It worked for me.
Upvotes: 0