Glide Library を使用して、画像ビューでプレースホルダーをロードするGIF画像を表示しようとしています。
Glide.with(context)
.load(ImageUrl())
.placeholder(R.drawable.loading2)
.asGif()
.crossFade()
.into(image);
このファイルを表示しようとしています
loading2.gif
しかし、このエラーが発生します:
エラー:(54、86)エラー:シンボルメソッドasGif()が見つかりません
ImageViewでGlideでGIFファイルを表示するにはどうすればよいですか?
上記の答えは私にはうまくいきませんでした。以下のコードが機能します。
ImageView imageView = (ImageView) findViewById(R.id.imageView);
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.raw.sample_gif).into(imageViewTarget);
Glide 4. +の場合
ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
Glide 3.0では、asGif()を先に設定する必要があります:
Glide.with(context)
.load(imageUrl)
.asGif()
.placeholder(R.drawable.loading2)
.crossFade()
.into(imageView);
load()
を使用するだけで、データのタイプに応じてGIFまたはビットマップのいずれかがロードされることに注意してください。指定したURLがgifでない場合にロードを失敗させない限り、asGif()
を指定する必要はありません。
同じ問題がありました。 asGif()
がある場所に移動することで解決できます。 .load()
の直前になければなりません。
だから変更:
Glide.with(context)
.load(ImageUrl())
.placeholder(R.drawable.loading2)
.asGif()
....
に
Glide.with(context)
.asGif()
.load(ImageUrl())
.placeholder(R.drawable.loading2)
....
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()は以前に使用する必要があります。そうしないと認識されません。
GlideDrawableImageViewTargetを使用します。このコードは私のために機能します。
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(imageView);
Glide.with(this).load(R.drawable.logo_gif).into(imageViewTarget);
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'
これを試して。それは私のために働いたし、あなたのコードでも動作します。画像だけでなく、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);
}
Glideアニメーションの自動再生gifファイル、追加のメソッドは不要
以下のコードを使用
Glide.with(this)
.load(R.drawable.logo)
.into(imageView);
この解決策は一種の回避策です
<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つのImageViewを使用します
@Preetamで指定されたソリューションを使用して、最初のImageViewに読み込みgifを配置します
ImageView loadingImageView = (ImageView) findViewById(R.id.loadingImageView);
GlideDrawableImageViewTarget loadingImageViewTarget = new GlideDrawableImageViewTarget(loadingImageView);
Glide.with(this).load(R.raw.spinner).into(loadingImageViewTarget);
2番目のImageViewでネットワークから画像を読み込みます(ネットワークからの画像が読み込まれたら読み込みgifを非表示にしたくない場合は順序が重要です)
ImageView mainImageView = (ImageView) findViewById(R.id.mainImageView);
GlideDrawableImageViewTarget mainImageViewTarget = new GlideDrawableImageViewTarget(mainImageView);
Glide.with(this).load(imageUrl).into(mainImageViewTarget);