Показать GIF файл с помощью Glide (библиотека загрузки изображений и кеширования)
Я пытаюсь показать изображение GIF как загрузку заполнителя в представлении изображения - Glide Library:
Glide.with(context)
.load(ImageUrl())
.placeholder(R.drawable.loading2)
.asGif()
.crossFade()
.into(image);
Я пытаюсь показать этот файл
loading2.gif
но получите эту ошибку:
Ошибка: (54, 86) ошибка: не удается найти метод символов asGif()
Как я могу показать GIF файл с помощью Glide в imageView?
Ответы
Ответ 1
Этот ответ мне не помог. Ниже приведен код.
ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
Ответ 2
Для Glide 4. +
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
Ответ 3
Для Glide 3.0 вам нужно установить asGif() раньше:
Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);
Имейте в виду, что только использование load()
будет загружать GIF или Bitmap в зависимости от типа данных. Если вы не хотите, чтобы ваш груз вышел из строя, если данный URL не является gif, вам не нужно указывать asGif()
Ответ 4
У меня была такая же проблема. Вы можете решить эту проблему, переместившись туда, где находится asGif()
. Он должен появиться непосредственно перед .load()
.
Итак, измените:
Glide.with(context)
.load(ImageUrl())
.placeholder(R.drawable.loading2)
.asGif()
....
to
Glide.with(context)
.asGif()
.load(ImageUrl())
.placeholder(R.drawable.loading2)
....
Ответ 5
Из версии Glide v4:
Зависимость:
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
Перейдите по этой ссылке Чтобы создать класс GlideApp:
Вы можете напрямую предоставить исчерпывающую ссылку на GlideApp
GlideApp.with(this).load(R.drawable.ic_loader).into(mBinding.progressBar);
Если вы получите какую-либо ошибку, сообщите мне.
Ответ 6
Используйте GlideDrawableImageViewTarget. Этот код работает для меня.
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
Ответ 7
Вот еще один пример. Я заметил, что Glide иногда не запускает Gif автоматически. Это решение сработало для меня:
В этом примере imageView
является одним из членов класса RecyclerView ViewHolder.
Glide.with(itemView.getContext())
.asGif()
.load(thumbPath)
.placeholder(ResourcesCompat.getDrawable(context.getResources(),
R.drawable.image_loading_placeholder, null))
.centerCrop()
.into(new ImageViewTarget<GifDrawable>(imageView) {
@Override
protected void setResource(@Nullable GifDrawable resource) {
imageView.setImageDrawable(resource);
}
});
Метод .asGif() необходимо использовать раньше, иначе он не будет распознан
Ответ 8
Это решение - это работа вокруг
<RelativeLayout
android:layout_width="wrap_content"
android:id="@+id/ImageContainer"
android:background="#fff"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:id="@+id/loadingImageView"
android:layout_centerInParent="true"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/mainImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:layout_centerInParent="true"
/>
</RelativeLayout>
-
вместо того, чтобы использовать один, используйте 2 ImageViews
-
Поместите загрузку gif в первый ImageView, используя решение, данное @Preetam
ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);
-
Загрузить изображение из сети во втором ImageView
(Заказ важен, если вы не хотите скрывать загрузку gif один раз
загружается изображение из сети)
ImageView mainImageView = (ImageView) findViewById(R.id.mainImageView);
GlideDrawableImageViewTarget mainImageViewTarget = new GlideDrawableImageViewTarget(mainImageView);
Glide.with(this).load(imageUrl).into(mainImageViewTarget);
Ответ 9
Glide автоматически воспроизводит анимированные gif- файлы, без необходимости дополнительного метода
Используйте ниже код
Glide.with(this)
.load(R.drawable.logo)
.into(imageView);
Ответ 10
Попробуйте это. Он работал у меня и будет работать и для вашего кода. Он работает как для изображений, так и для gif.
ImageView imageView = (ImageView) findViewById(R.id.test_image);
GlideDrawableImageViewTarget imagePreview = new GlideDrawableImageViewTarget(imageView);
Glide
.with(this)
.load(url)
.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) {
return false;
}
})
.into(imagePreview);
}
Ответ 11
Instead of GlideDrawableImageViewTarget use DrawableImageViewTarget
ImageView imageView =findViewById(R.id.imageView);
DrawableImageViewTarget imageViewTarget = new DrawableImageViewTarget (imageView);
Glide.with(this).load(R.raw.image_loader).into(imageViewTarget);
library: implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'
Ответ 12
Вот лучший способ
Glide.with(a).load(item[position])
.thumbnail(Glide.with(a).load(R.drawable.preloader))
.fitCenter()
.crossFade()
.into(imageView);