web-dev-qa-db-ja.com

Glide-4.0.0プレースホルダが不足している、エラー、GlideAppであり、そのメソッドのプレースホルダ、エラーが解決されていない

画像をダウンロードして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);
72
Ritesh Bhavsar

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の他の変更点です。

176
Nilesh Rathod

あなたが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);

最新バージョンのグライド、バグ修正および機能を参照してください。

25
ND1010_

あなたがGlideAppを使いたいのなら、スクリーンショットのようにdependenciesアノテーションプロセッサに追加する必要があります。

How to add GlideApp to your project

次に、AppGlideModule実装をアプリケーションに含めます。

@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

@GlideModuleアノテーションを忘れないでください。それからあなたはプロジェクトを構築する必要があります。そしてGlideAppは自動的に生成されます。

10
Vlad Pylyp

依存関係:

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:まだ実装されていません

6
zhen She

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サブクラスはほとんどの場合より便利です。

5
Shubham Sejpal

ワーキング

Glide.with(context!!)
     .load(user.profileImage)
     .apply (RequestOptions.placeholderOf(R.drawable.dummy_user))
     .into(edit_profile_image)
4
Gurwinder Singh
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);
1
Trk

アプリのいたるところで共通のプレースホルダーを使用したい場合は、次のようにします。

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を使用する必要がなくなり、自動的に適用されます。