Android Fill Partial Arc

android, android-canvas, geometric-arc, java

Solution

Here is a simple way to draw filled arc with border:

Point center = new Point(canvas.getWidth()/2, canvas.getHeight()/2);
int inner_radius = 100;
int outer_radius = 150;
int arc_sweep = 90;
int arc_ofset = 30;

RectF outer_rect = new RectF(center.x-outer_radius, center.y-outer_radius, center.x+outer_radius, center.y+outer_radius);
RectF inner_rect = new RectF(center.x-inner_radius, center.y-inner_radius, center.x+inner_radius, center.y+inner_radius);

Path path = new Path();
path.arcTo(outer_rect, arc_ofset, arc_sweep);
path.arcTo(inner_rect, arc_ofset + arc_sweep, -arc_sweep);
path.close();

Paint fill = new Paint();
fill.setColor(Color.GREEN);
canvas.drawPath(path, fill);

Paint border = new Paint();
border.setStyle(Paint.Style.STROKE);
border.setStrokeWidth(2);
canvas.drawPath(path, border);

(The `Path` and `Paint` allocation is made to be clear not optimal)

Problem

How could I fill the green portion between two arcs shown below using the paint and canvas methods? Here is how I draw the two arcs, I also could figure out how to connect them with lines but I don't know how I can fill the inner area. ``` // set to stroke black paint.setColor(Color.BLACK); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth((float) STROKE_WIDTH); // outside arc RectF arc_oval_outside = new RectF((float) (getX()), (float) (getY()), (float) (getX() + getWidth()), (float) (getY() + getHeight())); canvas.drawArc(arc_oval_outside, (float) (0.0), (45.0) (ARC_SWEEP), false, paint); // inside arc RectF arc_oval_inside = new RectF((float) (getX() + ARC_WIDTH), (float) (getY() + ARC_WIDTH), (float) (getX() + getWidth() - ARC_WIDTH), (float) (getY() + getHeight() - ARC_WIDTH)); canvas.drawArc(arc_oval_inside, (float) (0.0), (float) (ARC_SWEEP), false, paint); ```

Original source