Search code examples
androidandroid-volleypicassoandroid-glideimage-loading

How to show progressbar using Volley/ Glide/Picasso or other , while image downloading from server


I want to show progress bar(showing percentage) using Volley/ Glide/Picasso or other network call libraries. There are a lot of solutions but not by the Volley/ Glide/Picasso, how can I get file image size before downloading and with time remaining size so that I can show with the progress bar.

Use Picasso.

Picasso.with(MainActivity.this).load(server_url).into(image_download);

using Glide

 GlideApp
.with(myFragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_spinner)
.into(myImageView);

Solution

  • Try this using glide

    progressBar = (ProgressBar)findViewById(R.id.progressBar);
    progressBar.setVisibility(View.VISIBLE);
            Glide.with(context)
                    .load(imageUrl)
                    .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(imageview);
    

    with Picasso

    Picasso.with(context)
                .load(imageUrl)
                .into(imageview, new com.squareup.picasso.Callback() {
                            @Override
                            public void onSuccess() {
                                //do something when picture is loaded successfully
                                 progressBar.setVisibility(View.GONE);
    
                            }
    
                            @Override
                            public void onError() {
                                //do something when there is picture loading error
                            }
                        });
    

    with AsyncTask

    public class DownloadImage extends AsyncTask<String, Integer, Bitmap> {
        ImageView bmImage;
        ProgressBar progressBar;
    
        public DownloadImage(ImageView bmImage, ProgressBar progressBar) {
            this.bmImage = bmImage;
            this.progressBar = progressBar;
        }
    
        protected Bitmap doInBackground(String... urls) {
            String urldisplay = urls[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(urldisplay).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.d("Error", e.getStackTrace().toString());
    
            }
            return mIcon11;
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            progressBar.setProgress(values[0]);
        }
    
        protected void onPostExecute(Bitmap result) {
            bmImage.setImageBitmap(result);
        }
    }
    

    use like this

     new DownloadImage(imamgeview,progressBar).execute(url);