Davide
Davide

Reputation: 53

Android draw circle around Circular Bitmap

Hello I have this code to create a circular bitmap, but I also want to draw a circle around this circular bitmap.

I mean like the circular bitmap inside and a tiny colored stroke around the circular bitmap. I have tryed different solutions but the circle doesn't get draw normally. The bitmap will be used as a marker in a MapView instance.

Here is my code (this was a test code to try to draw a black circle under the circular bitmap)

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

        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        canvas.drawOval(rectF, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        final Paint p = new Paint();
        final Rect r = new Rect(0, 0, bitmap.getWidth() + 10, bitmap.getHeight() + 10);
        final RectF rF = new RectF(rect);
        p.setColor(Color.BLACK);
        canvas.drawOval(rF, p);

        bitmap.recycle();

        return output;
    }

Thank you!

Upvotes: 1

Views: 368

Answers (1)

Alireza Barakati
Alireza Barakati

Reputation: 1074

You can use bellow codes:

public static Bitmap convertToCircularBitmap(Bitmap bitmap, int strokeSize) {
    
    int size = bitmap.getWidth() / 2;
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap
            .getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(output);
    
    final int color =0xff424242;
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(color);
    canvas.drawCircle(size,size,size-strokeSize,paint);

    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);

    final int strokeColor = Color.rgb(0, 0, 0);
    final Paint strokePaint = new Paint();
    strokePaint.setAntiAlias(true);
    strokePaint.setColor(strokeColor);
    strokePaint.setStrokeWidth(strokeSize);
    strokePaint.setStyle(Paint.Style.STROKE);
    canvas.drawCircle(size,size,size-strokeSize,strokePaint);
    return output;
}

Upvotes: 1

Related Questions