2013-10-23 10 views
7

मैंने हाल ही में एक परिपत्र इमेज व्यू क्लास बनाने के लिए एक छवि दृश्य से विस्तार किया है जो एक रंगीन सीमा के साथ छवि परिपत्र बनाता है। इस कैनवास है कि में पारित हो जाता है पर बनाकर OnDraw (कैनवास) विधि के माध्यम से किया जाता है:कस्टम इमेज व्यू क्लास पिकासो छवि डाउनलोडिंग लाइब्रेरी के साथ काम नहीं कर रहा है

//load the bitmap 
    loadBitmap(); 

    // init shader 
    if(image !=null) 
    { 
     shader = new BitmapShader(Bitmap.createScaledBitmap(image, viewWidth + (borderWidth * 2), viewHeight + (borderWidth * 2), true), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
     paint.setShader(shader); 

     int circleCenter = viewWidth/2; 

     // circleCenter is the x or y of the view's center 
     // radius is the radius in pixels of the cirle to be drawn 
     // paint contains the shader that will texture the shape 
     canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth, paintBorder); 
     canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter, paintBackground); 
     canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter, paint); 
    } 

तो यह थोड़ा काम करता है जब एक drawable या बिटमैप के माध्यम से छवि स्थापित कर लिया। मैंने इसे भी बढ़ाया है ताकि मैं इसे Google के वॉली नेटवर्क इमेज व्यू के साथ उपयोग कर सकूं जो काम करता है।

मेरी समस्या तब आती है जब मैं कोशिश करता हूं और हमें मेरी सर्कुलर इमेज व्यू क्लास पिकासो छवि डाउनलोड लाइब्रेरी के साथ-साथ मैं इसे वॉली के विकल्प के रूप में देख रहा हूं। BitmapDrawable प्राप्त करते समय पहली पंक्ति पर मेरे loadBitmap() फ़ंक्शन में क्लासकास्ट अपवाद क्या होता है।

private void loadBitmap() 
{ 
    BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable(); 

    if(bitmapDrawable != null) 
     image = bitmapDrawable.getBitmap(); 
} 

पिकासो ने चित्र डाउनलोड करने से पहले यह प्लेसहोल्डर छवि को ठीक से ठीक कर दिया है। लेकिन जैसे ही पिकासो द्वारा छवि डाउनलोड की गई है, यह क्लासकास्टएक्सप्शन के साथ बिटमैपड्रायबल के बजाय getDrawable() रिटर्न और पिकासो ड्रावेबल के रूप में विफल हो जाती है।

मैं अपने परिपत्र इमेज व्यू क्लास में ऑनड्रा (कैनवास) विधि में छवि को गोल करने के लिए काम रखना चाहता हूं क्योंकि यह पिकासो के साथ छवि दृश्य को सेट करते समय प्रक्रिया को करने के विपरीत अच्छी तरह से निहित और स्वचालित है । क्या यह संभव है?

अग्रिम धन्यवाद।

उत्तर

14

पिकासो का उपयोग कर परिपत्र छवियों के लिए, this कक्षा का उपयोग करें जो परिवर्तन लागू करता है।

Picasso.with(context).load(url).transform(new RoundedTransformation(radius, margin)).into(imageview); 
+0

यह हर बार एक नया बिटमैप बनाता है, नहीं? – secureboot

+0

मदद के लिए DesertIvy, droidx और जेक व्हार्टन धन्यवाद। जिस परियोजना के लिए यह था, उसे पकड़ लिया गया था और अब समस्या पर वापस आ रहा है। मैंने उपर्युक्त कामों के साथ उपरोक्त कोशिश की है। –

5

जब पिकासो के साथ ऐसा करने आपको चाहिए या तो:

  1. एक Transformation ताकि गोल बिटमैप स्मृति में कैश किया गया है, या
  2. क्लैंप एक कस्टम ImageView उपवर्ग में एक शेडर साथ कैनवास के रूप में राउंडिंग लागू करें । इस तकनीक पर विवरण Ragin 'cagin' द्वारा रोमेन लड़का on his blog

रेखांकित किया गया अंतर्निहित Bitmap एक ImageView से बाहर निकलने की कोशिश कर रहा एक विरोधी पैटर्न है। यदि आपको Bitmap तक पहुंच की आवश्यकता है (और आप नहीं करते हैं, तो आपको उपरोक्त में से किसी एक का उपयोग करना चाहिए), को अपने दृश्य पर लागू करें जिसका onBitmapSuccess कॉलबैक इसे प्रदान करेगा।

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