Attualmente sto utilizzando Picasso e OkHttp per il mio caching bitmap. Quello che voglio fare è recuperare una bitmap memorizzata nella cache, disegnarla e quindi rimettere quella bitmap disegnata nella memoria e nella cache del disco. La mia implementazione è piuttosto standard, sto solo usando Target e aggiungendo la bitmap caricata a un ImageView personalizzato che risiede in una GridView. Mi sono guardato intorno e non riesco a trovare un modo per farlo. Queste librerie supportano anche qualcosa di simile?Aggiorna/modifica bitmap memorizzata nella cache utilizzando Picasso e OkHttp
risposta
Picasso è solo la libreria per scaricare la cache e visualizza l'immagine (con vantaggi come trasformazioni, dissolvenza incrociata, ecc), non per la modifica . Ciò che sembra fare sembra andare oltre l'ambito di utilizzo di Picasso.
Direi che puoi ancora utilizzare Picasso per scaricare l'immagine, se lo desideri, ma quando ottieni una bitmap è la tua app che ha memorizzato la sua versione modificata. Quindi, quando un utente finisce di disegnarlo, è necessario archiviarlo localmente in un file (se si tratta di un'immagine grande è anche possibile creare miniature separate più piccole per GridView) e utilizzare questa versione. Per salvare i contenuti bitmap modificate in un file è possibile chiamare
outBitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
È possibile caricare i file locali sul tuo GridView utilizzando anche Picasso: Picasso.with(context).load("fileUrl").into(mImageView);
. Quindi nel tuo codice verificherai se hai una versione modificata locale e la carica da file locale usando Picasso o caricandola dal server usando altrimenti Picasso.
Se si desidera salvare l'immagine sul server, è possibile inviarla al server dopo che l'utente l'ha modificata. Quindi Picasso + OkHttp lo scaricherà nuovamente (supponendo che tu abbia aggiornato gli attributi della cache http come ETag sul server).
Provare a utilizzare una trasformazione di picasso . flusso di lavoro
di Picasso è come questo:
- ottenere l'immagine dalla rete
- cache immagine raw nella memoria/cache
- applicare la trasformazione (s) opzionale e cache questi risultati troppo
Quindi nel tuo caso dovresti effettuare una trasformazione personalizzata che altera la tua bitmap. La seconda volta che richiedi la bitmap con questa trasformazione specifica, verrà caricata dalla cache.
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
}
}
Non dimenticare di eseguire l'override del metodo chiave() come Picasso utilizza per generare la voce della cache.
Nel codice si può semplicemente utilizzare con il vostro normale richiesta di Picasso:
picasso.load(url).transform(new YourTransformation()).into(imageView);
L'utente sarebbe il disegno su di esso e si disegnerebbero su di esso potenzialmente più volte. Quindi non saprei come sarebbe disegnato. – Papajohn000
Quindi stai dicendo di salvare le bitmap modificate da qualche altra parte rispetto alla cache del disco usata da OkHttp/Picasso. Quindi controlla se la bitmap in quella posizione è aggiornata. Se viene caricata dal file locale alternativo? – Papajohn000
Farei qualcosa del genere sì. – EvilDuck