7

現在、ビットマップ キャッシュに Picasso と OkHttp を使用しています。私がやりたいことは、特定のキャッシュされたビットマップを取得して描画し、ビットマップに描画されたものをメモリとディスク キャッシュに戻すことです。私の実装はかなり標準的です。Target を使用して、読み込まれたビットマップを GridView にあるカスタム ImageView に追加するだけです。私は周りを見回してきましたが、これを行う方法が見つからないようです。これらのライブラリはこのようなものをサポートしていますか?

4

2 に答える 2

5

ピカソは、編集用ではなく、キャッシュをダウンロードして画像を表示するためのライブラリです(変換、クロスフェードなどの特典付き)。あなたがしているように見えることは、ピカソの使用の範囲を超えているようです.

必要に応じて Picasso を使用して画像をダウンロードすることもできますが、ビットマップを取得すると、変更されたバージョンを保存するアプリになります。そのため、ユーザーが描画を終了したら、自分でファイルにローカルに保存し (大きな画像の場合は、GridView 用に別の小さなサムネイルを作成することもできます)、このバージョンを使用する必要があります。変更されたビットマップの内容をファイルに保存するには、呼び出すことができます

outBitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);

Picasso を使用して GridView にローカル ファイルを読み込むこともできますPicasso.with(context).load("fileUrl").into(mImageView);。したがって、コードでは、ローカルで編集されたバージョンがあるかどうかを確認し、Picasso を使用してローカル ファイルからロードするか、そうでない場合は Picasso を使用してサーバーからロードします。

サーバーに画像を保存する場合は、ユーザーが編集した後にサーバーに送信できます。その後、Picasso+OkHttp はそれを再度ダウンロードします (サーバー上の ETag などの http キャッシュ属性を更新したと仮定します)。

于 2014-05-06T05:54:41.700 に答える
3

ピカソ変換を使用してみてください。

picasso のワークフローは次のようになります。

  1. ネットワークから画像を取得する
  2. raw 画像をメモリ/キャッシュにキャッシュする
  3. オプションの変換を適用し、それらの結果もキャッシュします

したがって、あなたの場合、ビットマップを変更するカスタム変換を行う必要があります。この特定の変換でビットマップを 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);
于 2014-05-05T16:01:05.320 に答える