2014-04-28 17 views
7

Şu an için bitmap önbellekleme için Picasso ve OkHttp kullanıyorum. Ne yapmak istediğim özel bir önbelleğe alınmış bitmap almak, üzerine çizmek ve bitmap üzerine çizilmiş olanları belleğe ve disk önbelleğine geri koymaktır. Uygulamam oldukça standart, sadece Hedef'i kullanıyorum ve yüklenen bitmap'i GridView'da bulunan özel bir ImageView'e ekliyorum. Etrafa baktım ve bunu yapmanın bir yolunu bulamıyorum. Bu kütüphaneler böyle bir şeyi destekliyor mu?Picasso ve OkHttp kullanarak önbelleğe alınmış bitmap'i güncelle/değiştir

cevap

4

Picasso önbelleğe indirme ve görüntüyü görüntülemek için sadece kütüphane . Göründüğünüz şey Picasso kullanımının kapsamının ötesine geçiyor gibi görünüyor.

İsterseniz, görüntüyü indirmek için Picasso'yu kullanmaya devam edebileceğinizi söyleyebilirim, ancak bir Bitmap elde ettiğinizde, mağazada bu değiştirilmiş sürüm var. Bir kullanıcı çizim yapmayı bitirdiğinde, onu yerel olarak bir dosyaya saklamanız gerekir (eğer büyük bir resimse GridView için ayrı küçük küçük resimler de oluşturabilirsiniz) ve bu sürümü kullanın. Picasso.with(context).load("fileUrl").into(mImageView);: bir dosyaya değiştirilen Bitmap içeriğini kaydetmek için Sen de Picasso kullanarak GridView içine yerel dosyaları yükleyebilirsiniz

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

çağırabilir. Kodunuzda, yerel düzenlenmiş sürümünüz olup olmadığını ve Picasso'yu kullanarak yerel dosyadan yükleyip yüklemediğini ya da Picasso'yu kullanarak sunucudan yükleyip yüklemediğinizi kontrol edersiniz.

Görüntüyü sunucuya kaydetmek isterseniz, kullanıcı düzenledikten sonra sunucuya gönderebilirsiniz. Daha sonra Picasso + OkHttp yeniden indirecektir (sunucuda ETag gibi http önbellek niteliklerini güncellediğiniz varsayılarak).

+0

Yani, düzenlenmiş bitmap'leri OkHttp/Picasso tarafından kullanılan disk önbelleğinden başka bir yere kaydedin diyorsunuz. Daha sonra sadece o konumda bitmap'in güncellenip güncellenmediğini kontrol edin. Alternatif yerel dosyadan yüklüyor mu? – Papajohn000

+0

Böyle bir şey yapardım evet. – EvilDuck

1

Bir picasso dönüşümü'u kullanmayı deneyin.

Picasso'nun iş akışı şu şekildedir:

  1. ağdan
  2. önbellek bellek/önbelleğinde ham görüntü
  3. opsiyonel dönüşümü (ler) uygulamak görüntü almak ve
çok bu sonuçları önbelleğe

Durumunuza göre bitmap'inizi değiştiren özel bir dönüşüm yapmanız gerekir. Bu spesifik dönüşümle bitmap'i ikinci kez talep ettiğinizde, önbellekten yüklenecektir.

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 önbellek girdisini oluşturmak için kullanır gibi anahtar() yöntemini geçersiz unutmayın.

sadece normal picasso isteği ile kullanabilirsiniz Kodunuzda: düzenleme için değil (vb solmaya çapraz, dönüşümler gibi Perks)

picasso.load(url).transform(new YourTransformation()).into(imageView); 
+0

Kullanıcı, üzerinde çizim yapan kişi olacak ve potansiyel olarak birden çok kez çizim yapacaktı. Yani nasıl çizileceğini bilmezdim. – Papajohn000