カスタム デコーダーのサポートは Glide 3.0 の大きな目標ではありませんでしたが (4.0 でサポートされる予定です)、やりたいことは可能です。
Glide のコードとサンプルは、これがどのように機能するかの 2 つの例を提供します。カスタム リソース タイプについては、SVG サンプルをご覧ください。カスタム モデル タイプとカスタム デコーダーについては、Gif フレームのデコードに使用されるコードをご覧ください。あなたの説明から、Gif フレームの例がおそらくより適切であるように思えます。
あなたが何をしたいのかを理解していると仮定すると、2 つのインターフェースを定義して提供する必要があります。
まず、 ModelLoaderを定義する必要があります。従来、ModelLoaders はデータの取得に使用されていました。それが必要ない場合 (つまり、識別子のみからビットマップをデコードできる場合)、上記の Gif フレームの例に従って、識別子を単純に渡すことができます。
次に、 ResourceDecoderを定義する必要があります。ResourceDecoder は識別子を受け取り、データ ストアをチェックし、Bitmap を生成してから、新しいBitmapResourceを返します。
Glide が認識しているリソース タイプをデコードしているため、ディスク キャッシングをサポートする場合は Glide のBitmapEncoderとStreamBitmapDecoderを渡し、変換を適用する場合は 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 のみを使用することを強制するのではなく、新しいコンポーネントを登録して既存のビルダーを使用できるようにすることで、ボイラープレートの一部を軽減するのに役立ちます。