使用Glide显示GIF文件(图像加载和缓存库)

时间:2015-06-26 21:20:17

标签: android imageview gif android-glide

我尝试在图片视图中将GIF图片显示为加载占位符 - 使用Glide Library

Glide.with(context)
    .load(ImageUrl())
    .placeholder(R.drawable.loading2)
    .asGif()
    .crossFade()
    .into(image);

我尝试显示此文件

  

loading2.gif

但得到此错误:

  

错误:(54,86)错误:无法找到符号方法asGif()

如何在imageView中使用Glide显示GIF文件?

14 个答案:

答案 0 :(得分:113)

上述答案对我不起作用。以下代码有效。

$query->select('makek')->
   from('golo')->
   where('golo.name LIKE "%string%" OR string LIKE CONCAT("%", golo.name, "%")');


$query->select('makek')->
   from('golo')->
   where('golo.name LIKE "%string%"')->
   orWhere('string LIKE CONCAT("%", golo.name, "%")');

答案 1 :(得分:20)

对于Glide 3.0,您需要先设置asGif():

Glide.with(context)
    .load(imageUrl)
    .asGif()
    .placeholder(R.drawable.loading2)
    .crossFade()
    .into(imageView);

请注意,仅使用load()将根据数据类型加载GIF或位图。如果您希望加载失败,如果给定的网址不是gif,则无需指定asGif()

答案 2 :(得分:20)

对于Glide 4。+

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);

答案 3 :(得分:11)

我有同样的问题。您可以通过移动 asGif() 所在位置来解决此问题。它必须直接在 .load() 之前。

所以改变:

Glide.with(context)
    .load(ImageUrl())
    .placeholder(R.drawable.loading2)
    .asGif()  
    ....

Glide.with(context)
     .asGif()         
     .load(ImageUrl())
     .placeholder(R.drawable.loading2)
    ....

答案 4 :(得分:1)

使用GlideDrawableImageViewTarget。这段代码适合我。

GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);

Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);

答案 5 :(得分:1)

从Glide版本v4:

依赖性:

implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

访问this link以创建 GlideApp 类:

您可以直接在GlideApp上给出可绘制的参考

GlideApp.with(this).load(R.drawable.ic_loader).into(mBinding.progressBar);

如果遇到任何错误,请告诉我。

答案 6 :(得分:1)

这是另一个例子。我观察到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()方法需要更早使用,否则将无法被识别

答案 7 :(得分:0)

这个解决方案是一种解决方法

<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>
  1. 而不是使用一个,使用2个ImageViews

  2. 使用@Preetam提供的解决方案将加载gif放入第一个ImageView中

    ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
    GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
    Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);  
    
  3. 在第二个ImageView中从网络加载图像 (如果你不想隐藏加载gif一次,那么顺序很重要 来自网络的图像已加载)

    ImageView mainImageView = (ImageView) findViewById(R.id.mainImageView);
    GlideDrawableImageViewTarget mainImageViewTarget = new GlideDrawableImageViewTarget(mainImageView);
    Glide.with(this).load(imageUrl).into(mainImageViewTarget);
    

答案 8 :(得分:0)

试试这个。它对我有用,也适用于你的代码。它既适用于图像,也适用于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);
}

答案 9 :(得分:0)

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'

答案 10 :(得分:0)

我使用的是Glide 4.11版,对我来说,它确实在.asGif()之后设置了Glide.with(context)

但是我还有另一个问题,在将gif加载到ImageView中时,我还设置了.dontAnimate()。显然,这是行不通的,因此我不得不从设置中删除.dontAnimate(),更改后一切正常。

此处是有关更多信息的问题,https://github.com/bumptech/glide/issues/3395

答案 11 :(得分:0)

把你的 gif 放在 raw 文件夹中,使用下面的代码也添加下面的 gradle 中的依赖

        //for glide
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
   ImageView layoutAnim;

 //load gif file to imageView where layoutanim is my imageView

    Glide.with(this).asGif().load(R.raw.backloader).into(layoutAnim);

  

答案 12 :(得分:-1)

这是最佳方式

 Glide.with(a).load(item[position])
            .thumbnail(Glide.with(a).load(R.drawable.preloader))
            .fitCenter()
            .crossFade()
            .into(imageView);

答案 13 :(得分:-1)

Glide 会自动播放动画 gif 文件,无需额外的方法

使用以下代码

Glide.with(this)
   .load(R.drawable.logo)
   .into(imageView);