2015-11-14 9 views
7

पर बिटमैप लोड करने के लिए ग्लाइड का उपयोग करें मैं बिटमैप को क्रॉप करने और फिर से आकार देने के बाद ImageView पर बिटमैप लोड करने के लिए ग्लाइड का उपयोग करना चाहता हूं।ImageView

मैं ImageView.setImageBitmap(bitmap); का उपयोग नहीं करना चाहता क्योंकि मैं बहुत सारी छवियां लोड कर रहा हूं और यह कुछ स्मृति ले रहा है, हालांकि छवियों का आकार छोटा है, मुझे बस ग्लाइड का उपयोग करने की आवश्यकता है क्योंकि मुझे पता है कि यह छवि कैशिंग को अनुकूलित करता है।

मैंने this पोस्ट पढ़ा, लेकिन जब मैंने इसे कार्यान्वित करने का प्रयास किया तो मुझे उनके समाधान को काफी समझ में नहीं आया। तो शायद किसी के पास एक क्लीनर और अधिक आसानी से समझने योग्य समाधान हो।

यह मेरा कोड है जो एक छवि को उठाता है और इसमें से एक बिटमैप बनाता है।

मुझे ImageView.setImageBitmap(bitmap); के बजाय ग्लाइड का उपयोग करने की आवश्यकता है।

new AsyncTask<String, Void, Void>() { 
    Bitmap theBitmap = null; 
    Bitmap bm = null; 

    @Override 
    protected Void doInBackground(String... params) { 
     String TAG = "Error Message: "; 
     try { 
      //Load the image into bitmap 
      theBitmap = Glide. 
        with(mContext). 
        load("http://example.com/imageurl"). 
        asBitmap(). 
        into(-1, -1). 
        get(); 

      //resizes the image to a smaller dimension out of the main image. 
      bm = Bitmap.createBitmap(theBitmap, 0, 0, 210, 80); 
     } catch (final ExecutionException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final InterruptedException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (final NullPointerException e) { 
      // 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void dummy) { 
     if (null != theBitmap) { 
      //Set image to imageview. 
      **// I would like to Use Glide to set the image view here Instead of .setImageBitmap function** 
      holder.mImageView.setImageBitmap(bm); 

      holder.mImageView.setAdjustViewBounds(true); 
      holder.mImageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     } 
    } 
}.execute(); 
+0

क्या आप मुझे बता सकते हैं कि आपकी समस्या क्या है? बिटमैप शून्य है या आपका 'छवि दृश्य' सफेद वर्ग दिखाता है? –

+0

नहीं, बिटमैप शून्य नहीं है, मुझे बिटमैप छवि को सीधे इसे सेट करने के बजाय ImageView में सेट करने के लिए ग्लाइड का उपयोग करने की आवश्यकता है। –

+0

कारण इसलिए है क्योंकि मैं बहुत सारी छवियां लोड कर रहा हूं, जिन्हें मेमोरी कैशिंग की आवश्यकता है। क्या आप मेरा मतलब समझ सकते हैं? –

उत्तर

18

आपको ग्लाइड के साथ छवि लोड करने के लिए AsyncTask की आवश्यकता नहीं है। ग्लाइड लोड छवि asynchronys। इस कोड का उपयोग करने का प्रयास करें:

Glide.with(mContext) 
       .load("http://example.com/imageurl") 
       .asBitmap() 
       .into(new SimpleTarget<Bitmap>() { 
        @Override 
        public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
         // you can do something with loaded bitmap here 

         // ..... 

         holder.mImageView.setImageBitmap(resource); 
        } 
       }); 
+0

नहीं, मैं छवि को शीर्ष पर क्रॉप करना चाहता हूं, केंद्र क्रॉप नहीं, यही कारण है कि मैं इसे से बिटमैप बनाना चुनता हूं और फिर इसे (0, 0, 210, 80) देता हूं ताकि वह उस आकार में फसल हो और शुरू हो जाए केंद्र के बजाय शीर्ष से। –

+0

मैंने अपना जवाब संपादित कर लिया है, कृपया इसे जांचें। पी। क्या आप शीर्ष पर बिटमैप शुरू करने के लिए स्थिरांक मान (उदा। 210,80) का उपयोग कर रहे हैं? मुझे लगता है कि यह खराब व्यावहारिक है और आपको शीर्ष संरेखण के साथ कस्टम 'ड्रायबल' का उपयोग करना चाहिए। –

+0

धन्यवाद लेकिन यह या तो काम नहीं करता है, जब आप ResourceReady पर अपना बिटकमैप बनाते हैं, तो यह वही काम करता है जब इसके बाहर ResourceReady पर। कोई बदलाव नहीं! –