2012-12-19 21 views
6

मैं एक imageView और और मैं गोलाकार कोनों बनाने के लिए कोशिश कर रहा हूँ है दौर की कोशिश कर रहा है, इस पद से समाधान के सभी की कोशिश की: How to make an ImageView with rounded corners? लेकिन काम कुछ भी नहीं .. यहाँ मेरी एक्सएमएल हैएंड्रॉयड बिटमैप कोनों

<RelativeLayout 
    android:id="@+id/RL_ImageHolder" 
    android:layout_width="150dp" 
    android:layout_height="180dp" 
    android:layout_alignBottom="@+id/relativeLayout2" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/relativeLayout2" 
    android:layout_marginLeft="10dp" > 

    <ImageView 
     android:id="@+id/imgPreview" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:contentDescription="Preview" 

     /> 
</RelativeLayout> 

और इस तरह मैं विधि पोस्ट में उल्लेख मैंने ऊपर लिंक करने के बाद का उपयोग कर imageView सेट है:

छवि ठीक से सेट है, लेकिन यह एक आयत रहता है .. कोई भी विचार क्यों यह काम नहीं करता?

संपादित करें: अभी पता चला है कि यह तब काम नहीं करता है जब छवि को लेआउट लेआउट में निश्चित चौड़ाई/ऊंचाई होती है .. सोचना चाहिए कि इसका प्रबंधन कैसे करें। धन्यवाद लोग कोड स्निपेट के नीचे के साथ

+0

चेक: [एंड्रॉइड पकाने की विधि # 1, गोलाकार कोनों के साथ छवि] (http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corners) द्वारा [रोमैन गाय] (http://stackoverflow.com/users/298575/romain-guy) –

उत्तर

7

कोशिश:

public static Bitmap GetCurveImage(Bitmap bitmap) { 
     // Bitmap myCoolBitmap = ... ; // <-- Your bitmap you 
     // want rounded 
     int w = bitmap.getWidth(), h = bitmap.getHeight(); 

     // We have to make sure our rounded corners have an 
     // alpha channel in most cases 
     Bitmap rounder = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(rounder); 

     // We're going to apply this paint eventually using a 
     // porter-duff xfer mode. 
     // This will allow us to only overwrite certain pixels. 
     // RED is arbitrary. This 
     // could be any color that was fully opaque (alpha = 
     // 255) 
     Paint xferPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     xferPaint.setColor(Color.RED); 

     // We're just reusing xferPaint to paint a normal 
     // looking rounded box, the 20.f 
     // is the amount we're rounding by. 
     canvas.drawRoundRect(new RectF(0, 0, w, h), 5.0f, 5.0f, xferPaint); 

     // Now we apply the 'magic sauce' to the paint 
     xferPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 

     Bitmap result = Bitmap.createBitmap(bitmap.getWidth(), 
       bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     Canvas resultCanvas = new Canvas(result); 
     resultCanvas.drawBitmap(bitmap, 0, 0, null); 
     resultCanvas.drawBitmap(rounder, 0, 0, xferPaint); 

     return result; 
    } 

आशा है कि यह आप में मदद मिलेगी।

+4

इसे कैनवास.drawRect() को कॉल करके और पेंट पर बिटमैपशैडर सेट करके कम कोड और अधिक कुशल तरीके से हासिल किया जा सकता है। –

+0

@RomainGuy: हाँ, आप सही हैं। क्षमा करें, मुझे अब तक इसके बारे में पता नहीं था। आपका सुझाव वास्तव में अच्छा है और सीधे आगे है। मैं आपके कोड को लागू करूंगा जब मुझे अपनी परियोजना में गोलाकार छवि लागू करने की आवश्यकता होगी। धन्यवाद। :) –