2

典型的ではない Glide (Android 用の画像キャッシュ ライブラリ) のユース ケースがListViewあります。 1) カスタムBitmapレンダラーを使用する。

ドキュメントを見ると、デコードとトランスコーディングに関する多くの議論が見られますが、私のユース ケースは実際には 2 つのどちらにも当てはまりません。識別子をレンダラーに渡すには Glide が必要です。レンダラーはデータストアをチェックし、必要に応じて を生成Bitmapします。言うべき流れはありません。

これを実現する方法の例を探しています。

4

1 に答える 1

3

カスタム デコーダーのサポートは Glide 3.0 の大きな目標ではありませんでしたが (4.0 でサポートされる予定です)、やりたいことは可能です。

Glide のコードとサンプルは、これがどのように機能するかの 2 つの例を提供します。カスタム リソース タイプについては、SVG サンプルをご覧ください。カスタム モデル タイプとカスタム デコーダーについては、Gif フレームのデコードに使用されるコードをご覧ください。あなたの説明から、Gif フレームの例がおそらくより適切であるように思えます。

あなたが何をしたいのかを理解していると仮定すると、2 つのインターフェースを定義して提供する必要があります。

  1. まず、 ModelLoaderを定義する必要があります。従来、ModelLoaders はデータの取得に使用されていました。それが必要ない場合 (つまり、識別子のみからビットマップをデコードできる場合)、上記の Gif フレームの例に従って、識別子を単純に渡すことができます。

  2. 次に、 ResourceDecoderを定義する必要があります。ResourceDecoder は識別子を受け取り、データ ストアをチェックし、Bitmap を生成してから、新しいBitmapResourceを返します。

Glide が認識しているリソース タイプをデコードしているため、ディスク キャッシングをサポートする場合は Glide のBitmapEncoderStreamBitmapDecoderを渡し、変換を適用する場合は Glide のBitmapTransformationsのいずれかを渡し、最後に Glide のBitmapImageViewTargetを使用できます。ビットマップをビューにロードする方法を指定します。

load 呼び出し全体は次のようになります。

Glide.with(fragment)
    .using(new YourModelLoader(), YourIdentifier.class)
    .load(yourIdentifier)
    .as(Bitmap.class)
    .decoder(new YourBitmapDecoder())
    .cacheDecoder(new FileToStreamDecoder(new StreamBitmapDecoder())
    .encoder(new BitmapEncoder())
    .transform(new CenterCrop())
    .into(new BitmapImageViewTarget(yourView);

これは指定するものが多いため、ビルダーを一度定義し、それを再利用して複数の識別子をロードすることもできます。

builder = Glide.with(fragment)
    .using(new YourModelLoader(), YourIdentifier.class)
    .as(Bitmap.class)
    .decoder(new YourBitmapDecoder())
    .cacheDecoder(new FileToStreamDecoder(new StreamBitmapDecoder())
    .encoder(new BitmapEncoder())
    .transform(new CenterCrop());

// At some point later:
builder
    .load(firstIdentifier)
    .into(new BitmapImageViewTarget(firstView));
builder
    .load(secondIdentifier)
    .into(new BitmapImageViewTarget(secondView));

Glide 4.0 は、各パーツを個別に提供して GenericRequestBuilder のみを使用することを強制するのではなく、新しいコンポーネントを登録して既存のビルダーを使用できるようにすることで、ボイラープレートの一部を軽減するのに役立ちます。

于 2015-01-29T05:38:22.863 に答える