2012-12-19 2 views
6

ich ein Imageview haben und und ich versuche, abgerundete Ecken zu schaffen, versucht alle Lösungen aus diesem Beitrag: How to make an ImageView with rounded corners? aber nichts funktionierte .. Hier ist meine XMLandroid versucht, die Bitmap-Ecken abzurunden

<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> 

und das ist, wie ich das Image setzt sie die Methode in der Post erwähnten Verwendung ich oben verlinkt habe:

Das Bild ist richtig eingestellt, aber es hält ein Rechteck .. Irgendwelche Ideen, warum es nicht funktioniert?

EDIT: gerade herausgefunden, dass das nur funktioniert, wenn das Layout, das das Bild enthält, eine feste Breite/Höhe hat. Muss darüber nachdenken, wie man das schafft. Danke Jungs

+0

überprüfen: [Android Rezept # 1, Bild mit abgerundeten Ecken] (http://www.curious-creature.org/2012/12/11/android-recipe-1-image-with-rounded-corner) von [Romain Guy] (http://stackoverflow.com/users/298575/romain-guy) –

Antwort

7

Versuch mit Unten-Code Snippet:

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; 
    } 

Hoffe, es wird Ihnen helfen.

+4

Es kann mit weniger Code und auf eine effizientere Weise erreicht werden, indem Sie Canvas.drawRect() aufrufen und einen BitmapShader für den Paint festlegen. –

+0

@RomainGuy: Ja, du hast Recht. Tut mir leid, ich wusste bis jetzt nicht darüber. Ihre Vorschläge sind wirklich nett und Straight Forward.i wird Ihren Code anwenden, wenn ich gerundetes Bild in meinem Projekt anwenden muss. Vielen Dank. :) –

Verwandte Themen