2013-06-11 9 views
10

Próbuję utworzyć okrągłą ramkę wokół mojej bitmapy!Dodawanie okrągłego okręgu ramki na zaokrąglonej mapie bitowej

This is what im trying to acheive!

z tym kodem im w stanie zrobić mój bitmapę Runda:

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

Co próbowałem jest narysować okrąg (The outcommented linia) z płótna, ale on nie miał wynik . Czy ktoś wie, w jaki sposób mogę dodać okrągłą obwódkę wokół niego?

EDIT

Kiedy używam wiersz:

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

Efekt jest, że 3 rogi uzyskać zaokrąglone ale lewy górny pozostaje taki sam (90 stopni) Ale nie mogę zobacz dowolną linię lub koło!

+0

czy wystąpił jakiś błąd? Jeśli nie, jaki był problem? – Sam

+0

@Sam O, przepraszam, zaktualizuję pytanie! – Sebastian

+0

jak udało ci się zrobić mały cień? – xanexpt

Odpowiedz

36

Aktualizacja

Tam teraz jest RoundedBitmapDrawable i odpowiednia fabryka w Support library polecam użyć, że jeżeli potrzebna jest większa elastyczność.


Original Odpowiedź

Trzeba narysować okrąg po bitmapy. Oto co dla mnie zrobiła.

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; 

To oczywiście nie obejmuje fantazyjnego cienia twojego przykładu. Możesz chcieć zagrać trochę z dodatkowymi pikselami.

+0

To się udało, działało świetnie! Dzięki! – Sebastian

+1

Jak mogę uzyskać większy obraz stąd? –

+0

Witam przy pomocy hello, otrzymuję informację, jaki jest pożytek ze stałych 8 i 4, które dodają szerokość i wysokość w różnych instrukcjach rysunkowych, czy możesz to wyjaśnić? jeszcze jedna rzecz dodaliśmy te wartości (8 i 4) w pikselach nie w odniesieniu do gęstości ekranu dp –

Powiązane problemy