2013-06-11 13 views
10

Sto cercando di creare una cornice rotonda attorno alla mia bitmap!Aggiunta di un cerchio circolare sul bitmap arrotondato

This is what im trying to acheive!

Con questo codice im in grado di fare il mio giro bitmap:

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

quello che ho provato è quello di disegnare un cerchio (la linea outcommented) con tela, ma non aveva alcun risultato . Qualcuno sa come posso aggiungere un bordo circolare attorno ad esso?

EDIT

Quando uso la linea:

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

L'effetto è che 3 angoli arrotondati ottenere ma la parte superiore sinistra rimane lo stesso (90 gradi) Ma non posso vedi qualsiasi linea o cerchio!

+0

hai avuto qualche errore? Se no qual era il problema? – Sam

+0

@Sam Oh scusa, aggiornerò la domanda! – Sebastian

+0

come hai fatto la piccola ombra dietro? – xanexpt

risposta

36

Aggiornamento

ora c'è RoundedBitmapDrawable e una corrispondente fabbrica nella Support library vi consiglio di utilizzare tale, a meno che non sia necessaria una maggiore flessibilità.


risposta originale

Bisogna disegnare il cerchio dopo bitmap. Questo è quello che ha fatto il trucco per me.

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; 

Questo naturalmente non include l'ombra di fantasia del tuo esempio. Si potrebbe voler giocare un po 'con i pixel aggiuntivi.

+0

Questo ha funzionato alla grande! Grazie! – Sebastian

+1

Come posso ottenere un'immagine più grande da qui? –

+0

hi @lovis, ho capito a cosa servono le costanti 8 e 4 che, aggiungendo alla larghezza e all'altezza in diverse dichiarazioni di disegno, puoi spiegarlo per favore? anche una cosa in più abbiamo aggiunto questi valori (8 e 4) in pixel non rispetto alla densità dello schermo dp –

Problemi correlati