AChartEngine条形图滚动超出Y轴

时间:2014-02-19 14:16:11

标签: android achartengine

我正在使用AChartEngine库在我的应用程序中绘制图形。在条形图的实现中,我启用了水平平移。另外,我在我的一个活动的相对布局中显示图形。问题是,当我向Y轴水平滚动时,条形行程超出Y轴,这看起来非常笨拙。代码如下所示。

public GraphicalView setTheBarGraph(String title) {
        String[] titles = new String[] { "WiFi", "Mobile Network" };
        int[] colors = new int[] { Color.rgb(51, 102, 153),
                Color.rgb(153, 51, 102) };
        double[] limits = new double[] { 0, 12, 0, 0 };
        XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
        if (title.equals("Month"))
            setChartSettings(renderer, "", title, "Usage" + "(" + monthSize
                    + ")", 0, usageValues.size() + 1, 0, totalMax,
                    Color.rgb(108, 122, 125), Color.rgb(108, 122, 125));
        else if (title.equals("Day"))
            setChartSettings(renderer, "", title,
                    "Usage" + "(" + daySize + ")", 0, usageValues.size() + 1,
                    0, totalMax, Color.rgb(108, 122, 125),
                    Color.rgb(108, 122, 125));
        renderer.getSeriesRendererAt(0).setDisplayChartValues(true);
        renderer.getSeriesRendererAt(1).setDisplayChartValues(true);
        renderer.getSeriesRendererAt(0).setChartValuesTextSize(18);
        renderer.getSeriesRendererAt(1).setChartValuesTextSize(18);
        renderer.setPanLimits(limits);
        renderer.setXLabels(0);
        renderer.setYLabels(12);
        for (int i = 0; i < monthList.size(); i++) {
            renderer.addXTextLabel(i + 1, monthList.get(i));
        }
        renderer.setInScroll(true);
        renderer.setXLabelsAlign(Align.LEFT);
        renderer.setYLabelsAlign(Align.RIGHT);
        renderer.setXLabelsColor(Color.rgb(108, 122, 125));
        renderer.setYLabelsColor(0, Color.rgb(108, 122, 125));
        renderer.setXLabelsPadding(5);
        renderer.setYLabelsPadding(5);
        renderer.setPanEnabled(true, false);
        renderer.setApplyBackgroundColor(true);
        renderer.setBackgroundColor(Color.TRANSPARENT);
        renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
        renderer.setZoomEnabled(false);
        renderer.setYLabelsAngle(20);
        // renderer.setZoomRate(1.1f);
        renderer.setBarSpacing(0.5);
        return ChartFactory.getBarChartView(mbcContext,
                buildBarDataset(titles, usageValues), renderer, Type.DEFAULT);
    }

    protected void setChartSettings(XYMultipleSeriesRenderer renderer,
            String title, String xTitle, String yTitle, double xMin,
            double xMax, double yMin, double yMax, int axesColor,
            int labelsColor) {
        renderer.setChartTitle(title);
        renderer.setXTitle(xTitle);
        renderer.setYTitle(yTitle);
        renderer.setXAxisMin(xMin);
        renderer.setXAxisMax(xMax);
        renderer.setYAxisMin(yMin);
        renderer.setYAxisMax(yMax);
        renderer.setAxesColor(axesColor);
        renderer.setLabelsColor(labelsColor);
        renderer.setMargins(new int[] { 35, 60, 30, 20 });
    }

    protected XYMultipleSeriesDataset buildBarDataset(String[] titles,
            List<double[]> values) {
        XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
        int length = titles.length;
        for (int i = 0; i < length; i++) {
            CategorySeries series = new CategorySeries(titles[i]);
            double[] v = values.get(i);
            int seriesLength = v.length;
            for (int k = 0; k < seriesLength; k++) {
                series.add(v[k]);
            }
            dataset.addSeries(series.toXYSeries());
        }
        return dataset;
    }

    protected XYMultipleSeriesRenderer buildBarRenderer(int[] colors) {
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        renderer.setAxisTitleTextSize(22);
        renderer.setChartTitleTextSize(22);
        renderer.setLabelsTextSize(17);
        renderer.setLegendTextSize(22);
        int length = colors.length;
        for (int i = 0; i < length; i++) {
            SimpleSeriesRenderer r = new SimpleSeriesRenderer();
            r.setColor(colors[i]);
            renderer.addSeriesRenderer(r);
        }
        return renderer;
    }

我上传了此问题的快照。请帮忙。

enter image description here

3 个答案:

答案 0 :(得分:2)

好吧,经过两天的打破,我终于找到了问题所在。

renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));

上面的代码,将边距颜色设置为透明。即使在轴线之后,这也会使条形图可见。这是非常不可接受的。无论边距颜色如何,条纹都不应超出轴线。

答案 1 :(得分:1)

看起来您正在使用旧版本的AChartEngine。我建议你升级到最新的1.2.0版本。

答案 2 :(得分:-2)

您是否尝试过renderer.setPanEnabled(false, false);