web-dev-qa-db-ja.com

GlideでGIFファイルを表示(画像の読み込みとキャッシュライブラリ)

Glide Library を使用して、画像ビューでプレースホルダーをロードするGIF画像を表示しようとしています。

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

このファイルを表示しようとしています

loading2.gif

しかし、このエラーが発生します:

エラー:(54、86)エラー:シンボルメソッドasGif()が見つかりません

ImageViewでGlideでGIFファイルを表示するにはどうすればよいですか?

46
mahdi

上記の答えは私にはうまくいきませんでした。以下のコードが機能します。

ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
114
Preetam

Glide 4. +の場合

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

Glide 3.0では、asGif()を先に設定する必要があります:

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

load()を使用するだけで、データのタイプに応じてGIFまたはビットマップのいずれかがロードされることに注意してください。指定したURLがgifでない場合にロードを失敗させない限り、asGif()を指定する必要はありません。

20
Sam Judd

同じ問題がありました。 asGif()がある場所に移動することで解決できます。 .load()の直前になければなりません。

だから変更:

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

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

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);

エラーが発生した場合は、お知らせください。

別の例を示します。 Glideは時々Gifを自動的に再生しないことがあります。このソリューションは私のために働いた:

この例では、imageViewはRecyclerViewのViewHolderクラスのメンバーの1つです。

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()は以前に使用する必要があります。そうしないと認識されません。

1
Ram Iyer

GlideDrawableImageViewTargetを使用します。このコードは私のために機能します。

GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);

Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
1
Sukhdeep Saini
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'
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);
}
0
Saket Kumar

Glideアニメーションの自動再生gifファイル、追加のメソッドは不要

以下のコードを使用

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

この解決策は一種の回避策です

<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. 1つを使用する代わりに、2つのImageViewを使用します

  2. @Preetamで指定されたソリューションを使用して、最初のImageViewに読み込みgifを配置します

    ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
    GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
    Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);  
    
  3. 2番目のImageViewでネットワークから画像を読み込みます(ネットワークからの画像が読み込まれたら読み込みgifを非表示にしたくない場合は順序が重要です)

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