2014-04-28 7 views
7

मैं वर्तमान में पिकासो और OkHttp उपयोग कर रहा हूँ का उपयोग कर बिटमैप कैश की गई। मैं क्या करना चाहता हूं एक विशिष्ट कैश्ड बिटमैप पुनर्प्राप्त करें, उस पर ड्रॉ करें, और उसके बाद इसे बिटमैप पर वापस मेमोरी और डिस्क कैश में डालें। मेरा कार्यान्वयन बहुत मानक है, मैं केवल लक्ष्य का उपयोग कर रहा हूं और लोड किए गए बिटमैप को एक कस्टम छवि दृश्य में जोड़ रहा हूं जो ग्रिड व्यू में रहता है। मैं चारों ओर देख रहा हूं और मुझे ऐसा करने का कोई तरीका नहीं दिख रहा है। क्या ये पुस्तकालय भी इस तरह कुछ समर्थन करते हैं?अपडेट/परिवर्तन मेरी बिटमैप कैशिंग के लिए पिकासो और OkHttp

उत्तर

4

पिकासो सिर्फ कैशिंग को डाउनलोड करने और छवि प्रदर्शित करने के लिए पुस्तकालय है (परिवर्तनों की तरह सुविधाएं के साथ, आदि fading क्रॉस) संपादन के लिए नहीं । ऐसा लगता है कि आपको पिकासो उपयोग के दायरे से बाहर जाना प्रतीत होता है।

मैं कहना चाहता हूँ आप अभी भी छवि डाउनलोड करने के लिए पिकासो उपयोग कर सकते हैं यदि आप चाहते हैं, लेकिन जब आप एक बिटमैप मिल संग्रहीत करते हैं यह संस्करण संशोधित है है कि आपके अनुप्रयोग है। तो जब कोई उपयोगकर्ता इसे चित्रित करता है तो आपको इसे स्थानीय रूप से फ़ाइल में संग्रहीत करना होगा (यदि यह एक बड़ी छवि है तो आप ग्रिड व्यू के लिए अलग-अलग छोटे थंबनेल भी बना सकते हैं) और इस संस्करण का उपयोग करें। एक फाइल करने के लिए बदल बिटमैप सामग्री बचाने के लिए आप

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

कॉल कर सकते हैं आप अपने GridView पिकासो भी उपयोग करते हुए स्थानीय फ़ाइलें लोड कर सकते हैं: Picasso.with(context).load("fileUrl").into(mImageView);। तो आपके कोड में आप जांच करेंगे कि क्या आपके पास स्थानीय संपादित संस्करण है और इसे पिकासो का उपयोग करके स्थानीय फ़ाइल से लोड करें या अन्यथा पिकासो का उपयोग करके सर्वर से लोड करें।

आप सर्वर पर छवि को बचाने के लिए चाहते हैं, तो आप इसे सर्वर को भेज सकते हैं उपयोगकर्ता के बाद यह संपादन किया। फिर पिकासो + ओकेएचटीपी इसे फिर से डाउनलोड करेगा (मान लीजिए कि आपने सर्वर पर ईटीएजी जैसे http कैश विशेषताओं को अपडेट किया है)।

+0

तो आप कह रहे हैं कि ओकेएचटीपी/पिकासो द्वारा उपयोग की जाने वाली डिस्क कैश की तुलना में कहीं और संपादित बिटमैप्स को सहेजें। फिर बस जांचें कि उस स्थिति पर बिटमैप अपडेट किया गया है या नहीं। अगर यह वैकल्पिक स्थानीय फ़ाइल से लोड हो गया है? – Papajohn000

+0

मैं ऐसा कुछ करूंगा। – EvilDuck

1

एक पिकासो परिवर्तन का उपयोग करें।

पिकासो की कार्यप्रवाह इस तरह है:

  1. नेटवर्क से
  2. कैश स्मृति/कैश में रॉ इमेज
  3. वैकल्पिक परिवर्तन (रों) लागू छवि हो और भी उन परिणामों को कैश

तो आपके मामले में आप देखेंगे कि आपके बिटमैप बदल एक कस्टम परिवर्तन बनाने के लिए की आवश्यकता होगी। दूसरी बार जब आप इस विशिष्ट परिवर्तन के साथ बिटमैप का अनुरोध करते हैं, तो इसे कैश से लोड किया जाएगा।

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.load(url).transform(new YourTransformation()).into(imageView); 
+0

उपयोगकर्ता उस पर एक ड्राइंग होगा और वे संभवतः कई बार उस पर ड्राइंग किया जाएगा। तो मुझे नहीं पता कि यह कैसे तैयार किया जाएगा। – Papajohn000

संबंधित मुद्दे