是否可能使用achartengine半个PieChart?

时间:2016-03-25 13:11:29

标签: android charts achartengine

你好我想用 achartengine 使用Half PieChart。但我没有成功。我怎么能这样做?请帮助我。

我试过这种方式。但是

    DefaultRenderer mRenderer = new DefaultRenderer();
    mRenderer.setLabelsColor(Color.BLACK);
    mRenderer.setPanEnabled(false);
    mRenderer.setChartTitleTextSize(mActivity.getResources().getDimension(R.dimen.graph_chart_title_size));
    mRenderer.setLabelsTextSize(mActivity.getResources().getDimension(R.dimen.graph_chart_text_size)); 
    mRenderer.setShowLegend(false);
    mRenderer.setClickEnabled(true);

1 个答案:

答案 0 :(得分:0)

只需使用此课程。你可以自己定制vsh。

<强> HalfPieGraph.java

public class HalfPieGraph extends View {

private Paint piePaint;
private RectF rectF;
private float[] data;

public PieGraph(Context context, AttributeSet attrs) {
    super(context, attrs);

    piePaint = new Paint();
    piePaint.setAntiAlias(true);
    piePaint.setDither(true);
    piePaint.setStyle(Paint.Style.FILL);
    data = new float[]{20f, 30f, 10f, 40f};

}

private float[] pieSegment() {

    float[] segValues = new float[this.data.length];
    float Total = getTotal();

    for (int i = 0; i < this.data.length; i++) {

        segValues[i] = (this.data[i] / Total) * -180;
    }

    return segValues;
}


private float getTotal() {

    float total = 0;

    for (float val : this.data) {
        total += val;
    }

    return total;
}

@Override
protected void onDraw(Canvas canvas) {

    if (data != null) {

        int top = getHeight() / 6;
        int left = getWidth() / 6;
        int endBottom = getHeight() - top;
        int endRight = getWidth() - left;

        rectF = new RectF(left, top, endRight, endBottom);

        float[] segment = pieSegment();

        float segStartPoint = 0;

        for (int i = 0; i < segment.length; i++) {

            Random rnd = new Random();
            int color = Color.argb(255, (int) segment[i], rnd.nextInt(256), rnd.nextInt(256));

            piePaint.setColor(color);
            canvas.drawArc(rectF, segStartPoint, segment[i], true, piePaint);
            segStartPoint += segment[i];
        }
    }
}

public void setData(float[] data) {

    this.data = data;
    invalidate();
}

}

相关问题