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

Показать 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?

4b9b3361

Ответ 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);