現在、ビットマップ キャッシュに Picasso と OkHttp を使用しています。私がやりたいことは、特定のキャッシュされたビットマップを取得して描画し、ビットマップに描画されたものをメモリとディスク キャッシュに戻すことです。私の実装はかなり標準的です。Target を使用して、読み込まれたビットマップを GridView にあるカスタム ImageView に追加するだけです。私は周りを見回してきましたが、これを行う方法が見つからないようです。これらのライブラリはこのようなものをサポートしていますか?
2 に答える
ピカソは、編集用ではなく、キャッシュをダウンロードして画像を表示するためのライブラリです(変換、クロスフェードなどの特典付き)。あなたがしているように見えることは、ピカソの使用の範囲を超えているようです.
必要に応じて Picasso を使用して画像をダウンロードすることもできますが、ビットマップを取得すると、変更されたバージョンを保存するアプリになります。そのため、ユーザーが描画を終了したら、自分でファイルにローカルに保存し (大きな画像の場合は、GridView 用に別の小さなサムネイルを作成することもできます)、このバージョンを使用する必要があります。変更されたビットマップの内容をファイルに保存するには、呼び出すことができます
outBitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
Picasso を使用して GridView にローカル ファイルを読み込むこともできますPicasso.with(context).load("fileUrl").into(mImageView);
。したがって、コードでは、ローカルで編集されたバージョンがあるかどうかを確認し、Picasso を使用してローカル ファイルからロードするか、そうでない場合は Picasso を使用してサーバーからロードします。
サーバーに画像を保存する場合は、ユーザーが編集した後にサーバーに送信できます。その後、Picasso+OkHttp はそれを再度ダウンロードします (サーバー上の ETag などの http キャッシュ属性を更新したと仮定します)。
ピカソ変換を使用してみてください。
picasso のワークフローは次のようになります。
- ネットワークから画像を取得する
- raw 画像をメモリ/キャッシュにキャッシュする
- オプションの変換を適用し、それらの結果もキャッシュします
したがって、あなたの場合、ビットマップを変更するカスタム変換を行う必要があります。この特定の変換でビットマップを 2 回目に要求すると、キャッシュから読み込まれます。
public class YourTransformation implements com.squareup.picasso.Transformation {
@Override
public Bitmap transform ( final Bitmap source ) {
final Paint paint = new Paint();
Bitmap output = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
// DO YOUR DRAWING STUFF ON CANVAS
if (source != output) {
source.recycle();
}
return output;
}
@Override
public String key () {
return "customTransformation" + SOME_UNIQUE_IDENTIFIER
}
}
picasso はキャッシュ エントリの生成に key() メソッドを使用するため、key() メソッドをオーバーライドすることを忘れないでください。
コードでは、通常の picasso リクエストで簡単に使用できます。
picasso.load(url).transform(new YourTransformation()).into(imageView);