2014-09-22 9 views
5

नहीं कहा जाता है, मुझे एक ही समस्या है, कि मैं चित्र कैशिंग प्रयोजन के लिए पिकासो द्वारा उत्पन्न किए गए ड्रॉबल्स का उपयोग करना चाहता हूं, लेकिन मैं इसे प्राप्त करने में सक्षम नहीं हूं।पिकासो ऑन बिटमैपलोडेड को कभी भी

Target targetBitmap = new Target() { 

      @Override 
      public void onPrepareLoad(Drawable arg0) { 

      } 

      @Override 
      public void onBitmapLoaded(Bitmap arg0, Picasso.LoadedFrom arg1) { 
       mBitmap = arg0; 
       BitmapDrawable d = new BitmapDrawable(context.getResources(), arg0); 

       int margin = 2; 
       int border = 0; 

       Rect r = new Rect(margin, margin, width - margin, height - margin); 

       int imageWidth = r.width(); 
       int imageHeight = r.height(); 

       if (imageHeight > r.height() - (border * 2)) { 
        imageHeight = r.height() - (border * 2); 
       } 

       r.left += ((r.width() - imageWidth)/2) - border; 
       r.right = r.left + imageWidth + border + border; 
       r.top += ((r.height() - imageHeight)/2) + border; 
       r.bottom = r.top + imageHeight + border + border; 

       Paint p = new Paint(); 
       p.setColor(0xFFFFFF); 

       c.drawRect(r, p); 
       r.left += border; 
       r.right -= border; 
       r.top += border; 
       r.bottom -= border; 
       d.setBounds(r); 
       d.draw(c); 
      } 

      @Override 
      public void onBitmapFailed(Drawable arg0) { 

      } 
     }; 

     Picasso.with(context).load(app.getListBookDetails().get(img_num).getImage_150x225()).into(targetBitmap); 

लेकिन यहाँ onBitmapLoaded विधि कभी नहीं कहा जाता है: यहाँ कोड है जो मैं बिटमैप ड्रॉएबल तक पहुँचने के लिए उपयोग कर रहा हूँ है। मैं इस विधि को कैसे एक्सेस कर सकता हूं? कृपया सहायता करें, अगर आप कर सकते हैं। मैंने सबकुछ खरोंच कर लिया है लेकिन व्यर्थ में सब कुछ चला गया है।

धन्यवाद सनत

+0

यदि आप पिकासो कॉल से पहले जोड़ते हैं, तो लाइन 'Log.d ("myapp", app.getListBookDetails()। (Img_num) .getImage_150x225()); 'यह क्या कहता है? – Budius

+0

यह मुझे छवि यूआरएल दिखाता है जिसके लिए मैंने पिकासो का इस्तेमाल किया था। –

+0

क्या आपके ऐप की नेटवर्क अनुमति है? – Budius

उत्तर

5

यहाँ मामले में नमूना कोड आप कचरा एकत्र किया जा रहा से लक्ष्य वस्तु को रोकने के लिए चाहते हैं:

final Target mTarget = new Target() { 
         @Override 
         public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom loadedFrom) { 
          Log.d("DEBUG", "onBitmapLoaded"); 
          BitmapDrawable mBitmapDrawable = new BitmapDrawable(getResources(), bitmap); 
          navigationMenuItem.setIcon(mBitmapDrawable); 
         } 

         @Override 
         public void onBitmapFailed(Drawable drawable) { 
          Log.d("DEBUG", "onBitmapFailed"); 
         } 

         @Override 
         public void onPrepareLoad(Drawable drawable) { 
          Log.d("DEBUG", "onPrepareLoad"); 
         } 
        }; 


        Picasso.with(this).load(tempUrl).into(mTarget); 
+4

यह कैसे है ओपी के मूल कोड से अलग? –

+0

@AdamJohns मैं इसे एकत्र – Killer

+0

यह काम करने के लिए नहीं जा रहा है कचरा होने से रोकने के लिए लक्ष्य वस्तु अंतिम बना दिया है: 'final' मतलब यह है कि स्थानीय चर भाषा के स्तर पर unchangable है, लेकिन इस संदर्भित वस्तु नहीं रोकता होने के लिए परिवर्तनीय जीसी द्वारा एकत्रित जब परिवर्तनीय दृश्यता गुंजाइश समाप्त होता है। –

0

आदेश में RxJava 2 के साथ अगले बिटमैप उपयोग पाने के लिए:

fun getBitmapSingle(picasso: Picasso, url: String): Single<Bitmap> = Single.create { 
    try { 
     if (!it.isDisposed) { 
      val bitmap: Bitmap = picasso.load(url).get() 
      it.onSuccess(bitmap) 
     } 
    } catch (e: Throwable) { 
     it.onError(e) 
    } 
} 

बिटमैप पुनर्प्राप्त करें:

getBitmapSingle(Picasso.with(context), "https:/...") 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe({ bitmap -> 
       // val drawable = BitmapDrawable(context, bitmap) 
       }, Throwable::printStackTrace) 
संबंधित मुद्दे