Я пытаюсь сгенерировать круговую диаграмму из значений из базы данных. Этот код ничего не генерирует, хотя я думаю, что алгоритм правильный. Пожалуйста, объясните мне, что не так с логикой?
Логика - это суммирование всех значений в массиве, деление каждого значения на эту сумму и умножение его на 360, т. Е. (Значение / сумма всех значений) * 360, даст угол для каждого значения относительно 360 градусов. Это правильно? Если нет, то какой должен быть правильный алгоритм? Если алгоритм правильный, то что не так с кодом?
Я делюсь кодом.
package com.example.piechartgenerationfromdatabase;
public class PieChartView extends android.view.View{
int totalNumberOfParts,sections;
int arrayLength;
int[] arrayOfNumbers;
String[] stringColorArray;
public void setArrayLength(int arrayLength) {
this.arrayLength = arrayLength;
arrayOfNumbers = new int[arrayLength];
stringColorArray = new String[arrayLength];
}
public void setTotalNumberOfParts(int totalNumberOfParts){
this.totalNumberOfParts = totalNumberOfParts;
}
public void setSections(int numberOfSections){
this.sections = numberOfSections;
}
public PieChartView(Context context,int[] numbers,String[] colors){
super(context);
setArrayLength(colors.length);
for(int i=0; i<numbers.length;i++) {
arrayOfNumbers[i] = numbers[i];
}
int sum = 0;
int index = 0;
while(index<arrayLength){
sum = sum + arrayOfNumbers[index];
index++;
}
totalNumberOfParts = sum;
setTotalNumberOfParts(totalNumberOfParts);
setSections(numbers.length);
for(int i=0; i<colors.length;i++){
stringColorArray[i] = colors[i];
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
System.out.println("Entered onDraw method");
Paint paint = new Paint();
//canvas = new Canvas();
//canvas.drawPaint(paint);
//int color = Color.parseColor("red");
// paint.setColor(color);
//canvas.drawCircle(500,500,200,paint);
float initialAngle = 0;
int i=0;
while(i<sections){
//System.out.println("entered");
int color = (int) Color.parseColor(stringColorArray[i]);
paint.setColor(color);
RectF rect= new RectF(200f, 200f, 700f,700f);
canvas.drawArc(rect,initialAngle,((arrayOfNumbers[i]/totalNumberOfParts)*360),true,paint);
//paint.setColor(Color.parseColor("black"));
//canvas.drawText("a",midOfRectX,midOfRectY,paint);
initialAngle+=(arrayOfNumbers[i]/totalNumberOfParts)*360;
//canvas.drawArc(rect,0,90,true,paint);
i++;
//System.out.println("loop complete");
//System.out.println("i = "+i);
//System.out.println("j = "+con*j);
// System.out.println("k = "+con*k);
//System.out.println("hexStringColorArray[colorindex] "+hexStringColorArray[colorindex]);
//colorindex+=1;
}
}
}