S.Queroane
S.Queroane

Reputation: 87

progressbar disappears before the image appears

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

Answers (2)

UltimateDevil
UltimateDevil

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

enter image description here

Upvotes: 1

Aman Srivastava
Aman Srivastava

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

Related Questions