2013-06-11 2 views
10

Im пытается создать круглую рамку вокруг моего растрового изображения!Добавление круглого круга вокруг закругленного растрового изображения

This is what im trying to acheive!

С помощью этого кода им в состоянии сделать мое растровое круглое:

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

Что я пытался это сделать окружность (outcommented линия) с холстом, но это не имело никакого результата , Кто-нибудь знает, как я могу добавить вокруг него круговую рамку?

EDIT

Когда я использую строку:

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

Эффект, что 3 углов получить округлые, но верхние левые остаются прежними (90 градусов) Но я не могу см. любую строку или круг!

+0

у вас есть какие-либо ошибки? Если нет, в чем проблема? – Sam

+0

@Sam О, извините, я обновлю вопрос! – Sebastian

+0

как ты сделал маленькую тень? – xanexpt

ответ

36

Update

Там теперь RoundedBitmapDrawable и соответствующий завод в Support library я рекомендую использовать, что, если не требуется больше гибкости.


Оригинал ответа

Вы должны нарисовать круг после растрового изображения. Вот что сделал трюк для меня.

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; 

Это, конечно, не включает причудливую тень вашего примера. Возможно, вам захочется немного поиграть с дополнительными пикселями.

+0

Это было здорово! Благодаря! – Sebastian

+1

Как я могу получить больше изображения отсюда? –

+0

hi @lovis, я получаю цифру, что такое использование констант 8 и 4, добавляющих к ширине и высоте в разных заявлениях рисования, можете ли вы объяснить это? Кроме того, мы добавили эти значения (8 и 4) в пиксель не по плотности экрана dp –

Смежные вопросы