Подтвердить что ты не робот

Установите видимость индикатора выполнения, завершенного после загрузки изображения, используя библиотеку 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?

Glide.with(mcontext).load(imgLinkArray.get(position).mUrlLink)
     .into(imageView);

Я могу загрузить изображение с помощью Glide, но как я могу написать progressBar.setVisibility(View.GONE); где-нибудь в коде, если изображение загрузится?

4b9b3361

Ответ 1

Вопрос довольно старый, и я не знаю, какова была ситуация с скольжением в те времена, но теперь его можно легко сделать с помощью слушателя (не так, как было предложено в правильном ответе).

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, если хотите, чтобы скольжение обрабатывало их для вас.

Ответ 2

Мой ответ был основан на устаревших API. См. здесь для получения более актуального ответа.

Ответ 3

Если вы хотите сделать это в 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)

Ответ 4

В исключительном случае снова поставьте условие для отображения 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);

Ответ 5

Вышеупомянутое решение работает очень хорошо для меня, но когда я использую 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);
            }
        });

Ответ 6

  • В xml отобразится индикатор выполнения с высотой и шириной (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
    

Ответ 7

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);

Ответ 8

Это лучший ответ, поскольку он не использует какой-либо взломать как видимость видимости для получения желаемого результата.

Загрузите gif progressbar и назовите его 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 будет загружено, миниатюра исчезнет. Миниатюра сразу же исчезает при загрузке кэшированного изображения.