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