repun
repun

Reputation: 21

drawRoundRect in Android not working

I want to draw a rounded rectangle with drawRoundRect method in Android.

void drawRoundRect (RectF rect, float rx,  float ry, Paint paint)

I'm using Android Studio, and my testing device use Android 6.0.1, API 23

This is part of my code. It works find when I put zeros in rx and ry.

public void draw(Canvas canvas){
        canvas.drawColor(Color.WHITE);
        canvas.drawRoundRect(rect, 0, 0, pnt);
}

This draws a black rectangle in my screen.

But when I try to make it rounded,

public void draw(Canvas canvas){
        canvas.drawColor(Color.WHITE);
        canvas.drawRoundRect(rect, 10, 10, pnt);
}

It draws nothing. This only draws white background....

I tried different numbers like 100, 3, 5, 0.03f etc in rx and ry,

but any numbers bigger than 0 make drawRoundRect() not working.

Is there anything wrong with my code...?

Upvotes: 2

Views: 8064

Answers (4)

bdobrucali
bdobrucali

Reputation: 1

You could do this,

RectF rect = new RectF(0f, 0f, width, height);

canvas.drawRoundRect(rect , 0, 0, mPaint);

Upvotes: 0

Kacper Dziubek
Kacper Dziubek

Reputation: 1693

Make sure that coordinates in RectF that is used to draw rounded rectangle are correct. That means: rect.left < rect.right and rect.top < rect.bottom.

It seems that Android 7 corrects wrong coordinates itself and draws desired rounded rectangle, but Android 6 is drawing nothing if there is problem with coordinates.

Upvotes: 6

jeel raja
jeel raja

Reputation: 667

Try this,

Bitmap bitmap = Bitmap.createBitmap(
                        600, // Width
                        300, // Height
                        Bitmap.Config.ARGB_8888 // Config
                );

                Canvas canvas = new Canvas(bitmap);
                canvas.drawColor(Color.WHITE);
                Paint paint = new Paint();
                paint.setStyle(Paint.Style.FILL);
                paint.setColor(Color.RED);
                paint.setAntiAlias(true);

                int offset = 50;
                RectF rectF = new RectF(
                        offset, // left
                        offset, // top
                        canvas.getWidth() - offset, // right
                        canvas.getHeight() - offset // bottom
                );
                int cornersRadius = 25;
                canvas.drawRoundRect(
                        rectF, // rect
                        cornersRadius, // rx
                        cornersRadius, // ry
                        paint // Paint
                );
                mImageView.setImageBitmap(bitmap);

Upvotes: 0

santosh kumar
santosh kumar

Reputation: 2962

you can try this we have a little calculation but it works awesomely

private void drawRoundedRect(Canvas canvas, float left, float top, float right, float bottom) {
    float radius = getHeight() / 2;
    canvas.drawCircle(radius, radius, radius, mainPaint);
    canvas.drawCircle(right - radius, radius, radius, mainPaint);
    canvas.drawRect(left + radius, top, right - radius, bottom, mainPaint);
}

or you can check this

RectF rect = new RectF(10,10,20,20);
canvas.drawRoundRect(rect , 0, 0, mPaint);

Upvotes: 0

Related Questions