2013-06-11 47 views
10

Tôi đang cố gắng tạo khung tròn quanh bitmap của mình!Thêm vòng tròn khung tròn trên bitmap tròn

This is what im trying to acheive!

Với mã im này có thể làm cho bitmap của tôi tròn:

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

gì tôi đã cố gắng là để vẽ một vòng tròn (đường outcommented) với vải, nhưng Nó không có kết quả . Có ai biết cách tôi có thể thêm một đường viền tròn xung quanh nó không?

EDIT

Khi tôi sử dụng dòng:

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

Hiệu quả là, 3 góc được bo tròn nhưng phía trên bên trái giữ nguyên (90 độ) Nhưng tôi không thể thấy bất kỳ dòng hoặc vòng tròn nào!

+0

bạn có gặp lỗi gì không? Nếu không có vấn đề gì? – Sam

+0

@Sam Oh xin lỗi, tôi sẽ cập nhật câu hỏi! – Sebastian

+0

Bạn đã tạo ra bóng tối nhỏ như thế nào? – xanexpt

Trả lời

36

Cập nhật

Có tại là RoundedBitmapDrawable và một nhà máy tương ứng trong Support library Tôi khuyên bạn nên sử dụng, trừ trường hợp linh hoạt hơn là bắt buộc.


gốc trả lời

Bạn phải vẽ vòng tròn sau bitmap. Đây là mẹo đã làm cho tôi.

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; 

Điều này tất nhiên không bao gồm bóng tối ưa thích của ví dụ của bạn. Bạn có thể muốn chơi xung quanh một chút với các pixel bổ sung.

+0

Điều đó đã làm được, nó hoạt động rất tốt! Cảm ơn! – Sebastian

+1

Làm cách nào để có được hình ảnh lớn hơn từ đây? –

+0

hi @lovis, tôi nhận được con số việc sử dụng hằng số 8 và 4 làm tăng chiều rộng và chiều cao trong các câu lệnh vẽ khác nhau, bạn có thể giải thích nó không? Ngoài ra, một điều nữa chúng tôi đã thêm các giá trị này (8 và 4) vào pixel không liên quan đến mật độ màn hình dp –