70

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

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

我尝试显示这个文件

加载2.gif

但得到这个错误:

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

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

4

14 回答 14

123

上面的答案对我不起作用。下面的代码有效。

ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
于 2016-01-19T07:26:30.437 回答
57

对于 Glide 4.+

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
于 2017-06-12T07:03:20.503 回答
21

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

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

请记住,仅使用load()将根据数据类型加载 GIF 或位图。如果给定的 url 不是 gif,除非您希望加载失败,否则您不需要指定asGif()

于 2015-06-30T01:14:10.383 回答
16

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

所以改变:

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

Glide.with(context)
     .asGif()         
     .load(ImageUrl())
     .placeholder(R.drawable.loading2)
    ....
于 2017-01-24T00:05:36.003 回答
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() 需要提前使用,否则无法识别

于 2019-08-06T06:17:06.293 回答
4

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

使用下面的代码

Glide.with(this)
   .load(R.drawable.logo)
   .into(imageView);
于 2017-02-06T10:43:53.337 回答
4

使用 GlideDrawableImageViewTarget。这段代码对我有用。

GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);

Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
于 2018-01-13T17:55:09.677 回答
2

从 Glide 版本 v4 开始:

依赖:

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

访问此链接要创建GlideApp类:

你可以直接给drawable参考GlideApp

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

如果您有任何错误,请告诉我。

于 2018-12-01T11:24:50.053 回答
1

我正在使用 Glide 4.11 版,对我来说它确实.asGif()Glide.with(context).

但是我有另一个问题,我.dontAnimate()在加载 gif 到 ImageView 时也设置了。显然这不起作用,所以我不得不.dontAnimate()从我的设置中删除,并且在更改之后一切正常。

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

于 2020-09-03T13:13:02.390 回答
1

将您的 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);

  
于 2021-06-02T10:18:29.460 回答
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);
    
于 2016-08-12T16:15:10.510 回答
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);
}
于 2017-02-17T22:47:28.807 回答
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'
于 2018-11-29T12:59:48.550 回答
0

这是最好的方法

 Glide.with(a).load(item[position])
            .thumbnail(Glide.with(a).load(R.drawable.preloader))
            .fitCenter()
            .crossFade()
            .into(imageView);
于 2016-10-09T18:48:27.313 回答