画像をダウンロードしてImageView
で表示するには、Glide Androidライブラリを使用したいです。
以前のバージョンでは使用しました:
Glide.with(mContext).load(imgUrl)
.thumbnail(0.5f)
.placeholder(R.drawable.PLACEHOLDER_IMAGE_NAME)
.error(R.drawable.ERROR_IMAGE_NAME)
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
しかし、私はGlideドキュメンテーションを見ました:
代わりに
GlideApp.with()
を使ってくださいGlide.with()
私の懸念は、プレースホルダー、エラー、GlideApp、その他のオプションがないことです。
使ってます
compile 'com.github.bumptech.glide:glide:4.0.0'
どこが悪いの? こちら を参照してください。
GlideApp.with()
はどのように使用されていますか?
APIはAppGlideModule
と同じパッケージで生成され、デフォルトではGlideApp
という名前になります。アプリケーションは、すべてのロードをGlideApp.with()
ではなくGlide.with()
で開始することでAPIを使用できます。
GlideApp.with(fragment)
.load(myUrl)
.placeholder(placeholder)
.fitCenter()
.into(imageView);
RequestOptionsを使ってみてください。
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(R.drawable.ic_placeholder);
requestOptions.error(R.drawable.ic_error);
Glide.with(context)
.setDefaultRequestOptions(requestOptions)
.load(url).into(holder.imageView);
EDIT
.setDefaultRequestOptions(requestOptions)
が機能しない場合は、.apply(requestOptions)
を使用してください。
Glide.with(MainActivity.this)
.load(url)
.apply(requestOptions)
.into(imageview);
// or this
Glide.with(MainActivity.this)
.load(url)
.apply(new RequestOptions().placeholder(R.drawable.booked_circle).error(R.drawable.booked_circle))
.into(imageview);
// or this
Glide.with(MainActivity.this)
.load(url)
.apply(RequestOptions.placeholderOf(R.drawable.booked_circle).error(R.drawable.))
.into(imageview);
編集2ボーナス
これがGlide-4の他の変更点です。
requestOptions.circleCropTransform();
Cross fades()
GlideDrawableImageViewTarget
の使い方GifDrawable
を使用する方法あなたがGlideパッケージの依存関係、compile 'com.github.bumptech.glide:glide:3.7.0'
を使うのなら、以下のコードを使うべきです:
GlideApp
.with(your context)
.load(url)
.centerCrop()
.placeholder(R.drawable.loading_image)
.error(R.drawable.error_image)
.into(myImageView);
注:ドキュメント のように、
丸型画像:CircleImageView/CircularImageView/RoundedImageViewは、.thumbnail()または.placeholder()およびアニメーションGIFを含むTransitionDrawable(.crossFade())に問題があることがわかっています。BitmapTransformation(.circleCrop()はv4で使用可能になる)問題を解決するための.dontAnimate()。
次に使用する最新のアップデートバージョンcompile com.github.bumptech.glide:glide:4.1.1
は、以下のコードを使用する必要があります。
RequestOptions options = new RequestOptions()
.centerCrop()
.placeholder(R.drawable.default_avatar)
.error(R.drawable.default_avatar)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH)
.dontAnimate()
.dontTransform();
Glide.with(this)
.load(url)
.apply(options)
.into(imageView);
最新バージョンのグライド、バグ修正および機能を参照してください。
依存関係:
compile 'com.github.bumptech.glide:glide:4.1.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.1.1'
適切に注釈を付けたAppGlideModule実装を追加します。
import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
@GlideModule
public final class MyAppGlideModule extends AppGlideModule{}
また、あなたがジャックオプションを使用している場合は、以下の同様のエラーを回避するために、あなたはAndroid Studio 3.0.0 previewを使用する必要があります。
エラー:タスク ':app:transformJackWithJackForDebug'の実行に失敗しました。 com.Android.jack.ir.JNodeInternalError:Java.lang.Exception:Java.lang.AssertionError:まだ実装されていません
RequestOptionsも使用する必要はありません。
生成されたAPIは、GlideAppクラスを追加します。これは、RequestBuilderおよびRequestOptionsサブクラスへのアクセスを提供します。 RequestOptionsサブクラスには、RequestOptions内のすべてのメソッドとGlideExtensions内で定義されているすべてのメソッドが含まれています。 RequestBuilderサブクラスは、applyを使用しなくても、生成されたRequestOptionsサブクラス内のすべてのメソッドへのアクセスを提供します。
グライド使用: -
生成されたAPIなしのリクエストは、次のようになります。
Glide.with(fragment)
.load(url)
.apply(centerCropTransform()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH))
.into(imageView);
GlideAppを使用: -
生成されたAPIを使用して、RequestOptions
呼び出しをインライン化できます。
GlideApp.with(fragment)
.load(url)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.priority(Priority.HIGH)
.into(imageView);
生成されたRequestOptionsサブクラスを使用して同じオプションのセットを複数のロードに適用することはできますが、生成されたRequestBuilderサブクラスはほとんどの場合より便利です。
ワーキング
Glide.with(context!!)
.load(user.profileImage)
.apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
.into(edit_profile_image)
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.null_image_profile)
.error(R.drawable.null_image_profile);
//.centerCrop()
//.diskCacheStrategy(DiskCacheStrategy.ALL)
//.priority(Priority.HIGH);
Glide.with(context).load(imageUrl)
.apply(options)
.into(profileImage);
アプリのいたるところで共通のプレースホルダーを使用したい場合は、次のようにします。
Glide v4からGlideModuleを作成しているので、このクラスをコピーしてプロジェクトに貼り付けると、GlideAppクラス(その他のステップについては--- これに従ってください) :
@GlideModule
public class SampleGlideModule extends AppGlideModule {
@Override
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
super.applyOptions(context, builder);
builder.setDefaultRequestOptions(new RequestOptions().placeholder(R.drawable.logo).error(R.drawable.logo));
}
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
super.registerComponents(context, glide, registry);
}
}
ここですべての要求オプションを指定して、デフォルトとして設定できます。
このクラスを作成することで、GlideApp
とともに.placeholder
を使用する必要がなくなり、自動的に適用されます。