Что не так с этим кодом создания круговой диаграммы? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь сгенерировать круговую диаграмму из значений из базы данных. Этот код ничего не генерирует, хотя я думаю, что алгоритм правильный. Пожалуйста, объясните мне, что не так с логикой?

Логика - это суммирование всех значений в массиве, деление каждого значения на эту сумму и умножение его на 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;
    }
}

}

...