2013-06-11 10 views
10

Ich versuche, einen runden Rahmen um meine Bitmap zu erstellen!Hinzufügen eines runden Rahmenkreises auf gerundeter Bitmap

This is what im trying to acheive!

Mit diesem Code im Stande, meine Bitmap Runde zu machen:

public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap 
      .getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xff4242DB; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
    final RectF rectF = new RectF(rect); 
    final float roundPx = bitmap.getWidth()/2; 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 

    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
     //canvas.drawCircle(0, 0, bitmap.getWidth(), paint); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 

    return output; 
} 

, was ich versucht habe, ist, einen Kreis zu zeichnen (die auskommen Linie) mit Leinwand, aber es war kein Ergebnis . Weiß jemand, wie ich einen kreisförmigen Rand um ihn hinzufügen kann?

EDIT

Wenn ich die Zeile verwenden:

canvas.drawCircle(0, 0, bitmap.getWidth(), paint); 

Der Effekt ist, dass drei Ecken abgerundet bekommen, aber die obere linke bleibt gleich (90 Grad) Aber ich kann nicht sehe irgendeine Linie oder einen Kreis!

+0

hast du irgendeinen Fehler? Wenn nein, was war das Problem? – Sam

+0

@Sam Oh Entschuldigung, ich werde die Frage aktualisieren! – Sebastian

+0

Wie hast du den kleinen Schatten hinterlassen? – xanexpt

Antwort

36

aktualisieren

Es ist jetzt RoundedBitmapDrawable und eine entsprechende Fabrik in der Support library ich empfehlen, zu verwenden, es sei denn, mehr Flexibilität erforderlich ist.


Original-Antwort

Sie haben den Kreis nach die Bitmap zu zeichnen. Das war der Trick für mich.

int w = bitmap.getWidth();           
int h = bitmap.getHeight();           

int radius = Math.min(h/2, w/2);         
Bitmap output = Bitmap.createBitmap(w + 8, h + 8, Config.ARGB_8888); 

Paint p = new Paint();            
p.setAntiAlias(true);            

Canvas c = new Canvas(output);          
c.drawARGB(0, 0, 0, 0);            
p.setStyle(Style.FILL);            

c.drawCircle((w/2) + 4, (h/2) + 4, radius, p);     

p.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));     

c.drawBitmap(bitmap, 4, 4, p);          
p.setXfermode(null);             
p.setStyle(Style.STROKE);           
p.setColor(Color.WHITE);            
p.setStrokeWidth(3);             
c.drawCircle((w/2) + 4, (h/2) + 4, radius, p);     

return output; 

Dies beinhaltet natürlich nicht den schicken Schatten Ihres Beispiels. Vielleicht möchten Sie ein wenig mit den zusätzlichen Pixeln spielen.

+0

Das hat es geklappt, es hat super geklappt! Vielen Dank! – Sebastian

+1

Wie kann ich ein größeres Bild von hier bekommen? –

+0

hi @lovis, bekomme ich Abbildung, was ist die Verwendung von Konstante 8 und 4, die zu Breite und Höhe in verschiedenen Zeichenanweisungen hinzufügen, können Sie es bitte erklären? auch noch eine Sache, die wir Sie hinzugefügt diese Werte (8 und 4) in Pixel nicht in Bezug auf die Bildschirmdichte dp –