【问题标题】:AChartEngine bar graph scrolling beyond the Y Axis滚动超出 Y 轴的 AChartEngine 条形图
【发布时间】:2014-02-20 18:04:48
【问题描述】:

我正在使用 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;
    }

我已经上传了这个问题的快照。请帮忙。

【问题讨论】:

  • 请添加最新版本

标签: android achartengine


【解决方案1】:

好吧,经过两天的折腾,我终于弄清楚了问题所在。

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

上面的代码,将边距颜色设置为透明。这导致即使在轴线之后也可以看到条形图。这是相当不可接受的。无论边距颜色如何,条形都不应超出轴线。

【讨论】:

    【解决方案2】:

    您使用的是旧版本的 AChartEngine。我建议你升级到最新版本 1.2.0。

    【讨论】:

    • 你说这个问题在以前的版本中存在??我目前使用的是 1.1.0 版本。
    • 以前的版本存在这样的问题吗?我正在使用 1.1.0 版本。 1.2.0 是正式版还是测试版?
    • 这是一个夜间构建。
    • 我更新了版本。更新后我必须进行一些更改。尽管如此,问题仍然存在。我无法弄清楚原因。 X 轴标签在穿过 Y 轴后很快消失,而不是横条。
    • 您创建了透明背景,这可能是问题所在。
    【解决方案3】:

    你试过了吗renderer.setPanEnabled(false, false);

    【讨论】:

    • @Abhijith U 无法在不启用“renderer.setPanEnabled”的情况下滚动图表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多