I am trying to create a pie chart as follows:

But so far I have been able to achieve this:

To create a pie chart in android, I used a custom view class. For reference, you can find it below:
public class PieChartView extends View {
private int[] values = {30, 60, 90, 100, 150};
private int c[] = {Color.MAGENTA,Color.BLUE,Color.RED,Color.CYAN,Color.YELLOW};
private int valuesLength = values.length;
private RectF rectF;
private Paint slicePaint;
public PieChartView(Context context, AttributeSet attrs) {
super(context, attrs);
valuesLength = values.length;
slicePaint = new Paint();
slicePaint.setAntiAlias(true);
slicePaint.setDither(true);
slicePaint.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
MainActivity.getLog("=====On draw called=====");
if(values != null) {
int startTop = 0;
int startLeft = 0;
int endBottom = getHeight();
int endRight = endBottom;
rectF = new RectF(startLeft, startTop, endRight, endBottom);
float[] scaledValues = scale();
float sliceStartPoint = 0;
for(int i = 0; i < valuesLength; i++) {
slicePaint.setColor(c[i]);
MainActivity.getLog("Slice starting point:::::"+sliceStartPoint);
MainActivity.getLog("Scaled Value:::::"+scaledValues[i]);
canvas.drawArc(rectF, sliceStartPoint, scaledValues[i], true, slicePaint);
MainActivity.getLog("Rectangle height:::::"+rectF.height());
sliceStartPoint += scaledValues[i];
}
Paint innerPaintObj = new Paint();
innerPaintObj.setColor(Color.GREEN);
innerPaintObj.setStyle(Paint.Style.FILL);
innerPaintObj.setAntiAlias(true);
canvas.drawCircle(getWidth()/2, getHeight()/2, 100, innerPaintObj);
}
}
private float[] scale() {
float[] scaledValues = new float[this.values.length];
float total = getTotal();
for (int i = 0; i < this.values.length; i++) {
scaledValues[i] = (this.values[i] / total) * 360;
}
return scaledValues;
}
private float getTotal() {
float total = 0;
for (float val : this.values)
total += val;
return total;
}
}
It would be useful if someone could tell me how the inner circle should be transparent and how to fill sectors from half way.
Thank.
source
share