AChartEngine:在中心对齐条形图

时间:2014-03-31 12:47:02

标签: android charts achartengine

我正在使用优质图书馆AChartEngine在我的应用中显示不同的图表,但我面临两个问题:

1。在中心显示条形图

这是我想要的结果图片: achartengine bar chart

这里是我目前的状态: achartengine bars not centered

我使用XYMultipleSeriesRenderer渲染我的系列,每个系列有1个系列,以便为它们着色。

我已经尝试了mRenderer.setBarSpacing(0.5);方法(使用不同的参数,但它不会改变很多......)。我还尝试extend BarChart课程和Renderer但没有成功。

2。我会把标签和值放在中心

  • 默认情况下,标签会在网格线上方写入。我怎样才能将它移到中心?
  • 如何覆盖ChartValues的绘图以添加()并将它们设置为白色。我也会把它们显示在酒吧的底部中心,这可能吗?

编辑:

以下是启动条形图的部分代码:

    mRenderer.setMargins(new int[]{30, Utils.dpToPx(16, getActivity()),
            -Utils.dpToPx(20, getActivity()), Utils.dpToPx(16, getActivity())});
    mRenderer.setMarginsColor(Color.TRANSPARENT);

    mRenderer.setLabelsColor(colorWhiteChart);
    mRenderer.setYLabelsColor(0, getResources().getColor(R.color.chart_background));
    mRenderer.setXLabelsPadding(-1 * Utils.dpToPx(120, getActivity()));
    mRenderer.setYLabelsAlign(Paint.Align.LEFT);
    mRenderer.setYLabelsPadding(Utils.dpToPx(20, getActivity()));
    mRenderer.setLabelsTextSize(Utils.dpToPx(10, getActivity()));

    mRenderer.setAxesColor(colorWhiteChart);
    mRenderer.setGridColor(colorWhiteChart);

    mRenderer.setYAxisMin(0);
    mRenderer.setXAxisMin(1);
    mRenderer.setXAxisMax(8);

    mRenderer.setZoomEnabled(false, false);
    mRenderer.setPanEnabled(false, false);

    mRenderer.setApplyBackgroundColor(true);
    mRenderer.setBackgroundColor(getResources().getColor(R.color.chart_background));

    mRenderer.setShowGrid(true);
    mRenderer.setShowGridX(false);
    mRenderer.setShowAxes(false);
    mRenderer.setShowLegend(false);



    mRenderer.setBarWidth(16);
    mRenderer.setBarSpacing(0.5);

    mRenderer.setXLabels(8);

    mRenderer.setMarginsColor(getResources().getColor(R.color.chart_background));
    mSeries = new ArrayList<XYSeries>();
    mSeries.add(new XYSeries("0"));
    mSeries.add(new XYSeries("1"));
    mSeries.add(new XYSeries("2"));
    mSeries.add(new XYSeries("3"));
    mSeries.add(new XYSeries("4"));
    mSeries.add(new XYSeries("5"));
    mSeries.add(new XYSeries("6"));
    mSeries.add(new XYSeries("7"));

    generateData(mSeries);

    XYSeriesRenderer renderer = new XYSeriesRendererCustomBar(0);
    XYSeriesRenderer renderer1 = new XYSeriesRendererCustomBar(1);
    XYSeriesRenderer renderer2 = new XYSeriesRendererCustomBar(2);
    XYSeriesRenderer renderer3 = new XYSeriesRendererCustomBar(3);
    XYSeriesRenderer renderer4 = new XYSeriesRendererCustomBar(4);
    XYSeriesRenderer renderer5 = new XYSeriesRendererCustomBar(5);
    XYSeriesRenderer renderer6 = new XYSeriesRendererCustomBar(6);
    XYSeriesRenderer renderer7 = new XYSeriesRendererCustomBar(7);



    mRenderer.addSeriesRenderer(renderer);
    mRenderer.addSeriesRenderer(renderer1);
    mRenderer.addSeriesRenderer(renderer2);
    mRenderer.addSeriesRenderer(renderer3);
    mRenderer.addSeriesRenderer(renderer4);
    mRenderer.addSeriesRenderer(renderer5);
    mRenderer.addSeriesRenderer(renderer6);
    mRenderer.addSeriesRenderer(renderer7);


    mChart = ChartFactory.getBarChartView(getActivity(), mDataset, mRenderer, BarChart.Type.DEFAULT);

班级XYSeriesRendererCustomBar改变了栏目的颜色和细节:

    private class XYSeriesRendererCustomBar extends XYSeriesRenderer {
    public XYSeriesRendererCustomBar(int i) {
        new XYSeriesRenderer();
        setColor(RatingWidget.COLORS[i]);
        setDisplayChartValues(true);
        setChartValuesTextAlign(Paint.Align.CENTER);

        setChartValuesTextSize(Utils.dpToPx(12, getActivity()));
    }
}

我也尝试只使用一个系列并用不同的颜色渲染它,但是条形图仍然没有在中心呈现......有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在此行(代码)中使用Right而不是CENTER:

将以下代码替换为:

 setChartValuesTextAlign(Paint.Align.CENTER);

使用:

 setChartValuesTextAlign(Paint.Align.Right);

享受老兄:)