我正在使用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;
}
我上传了此问题的快照。请帮忙。
答案 0 :(得分:2)
好吧,经过两天的打破,我终于找到了问题所在。
renderer.setMarginsColor(Color.argb(0x00, 0x01, 0x01, 0x01));
上面的代码,将边距颜色设置为透明。即使在轴线之后,这也会使条形图可见。这是非常不可接受的。无论边距颜色如何,条纹都不应超出轴线。
答案 1 :(得分:1)
看起来您正在使用旧版本的AChartEngine。我建议你升级到最新的1.2.0版本。
答案 2 :(得分:-2)
您是否尝试过renderer.setPanEnabled(false, false);