gpt4 book ai didi

android - 使用achartengine在android中的条形图上设置滚动条

转载 作者:行者123 更新时间:2023-11-29 22:04:06 26 4
gpt4 key购买 nike

在我的项目中,我必须显示 30 天的条形图和每日 Netty 。在查看条形图 Activity 时,X 轴标签被折叠并且全部 *显示* 没有任何间距。当我单击缩放按钮时, View 被展开,我们可以看到带有相应 x 轴标签的栏。我需要在 Activity 开始时间的展开 View 中显示条形图。

显示条形图的代码:

     XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
renderer.setAxisTitleTextSize(16);
renderer.setChartTitleTextSize(20);
renderer.setLabelsTextSize(15);
renderer. setLegendTextSize(15);
// renderer.setInScroll(true);
//renderer.setMargins(new int[]{10,10,10,0});
int length = colors.length;
for (int j = 0; j < length; j++) {
SimpleSeriesRenderer r = new SimpleSeriesRenderer();
r.setColor(colors[j]);
renderer.addSeriesRenderer(r);
}
if(flag==1)
renderer.setChartTitle("Monthly Basis");
if(flag==0)
renderer.setChartTitle("Weekly Basis");
if(flag==2)
renderer.setChartTitle("Yearly Basis");
renderer.setXTitle("Date");
renderer.setYTitle("NetAmount");

renderer.setXAxisMin(0);

//renderer
renderer.setYAxisMin(100);
// renderer.setYAxisMax(35000);
renderer.setAxesColor(Color.GRAY);
renderer.setLabelsColor(Color.LTGRAY);
renderer.setXLabels(0);
//renderer.setYLabels(31);
renderer.setDisplayChartValues(true);
renderer.setXLabelsAlign(Align.LEFT);
renderer.setYLabelsAlign(Align.RIGHT);
if(flag==0 || flag==1)
{
for(int axis=1;axis<=31;axis++)
{
String d;
d=String.valueOf(axis);
renderer.addTextLabel(axis,d);

}
}
else
{
renderer.setXAxisMin(2005);
for(int axis=2005;axis<=2011;axis++)
{
String d;
d=String.valueOf(axis);
renderer.addTextLabel(axis,d);

}

// renderer.setXLabels(4);
}
//renderer.setPanEnabled(false,false);
//renderer.setZoomEnabled(false,false);
// renderer.setPanLimits(new double[] { 0, 32, -10, 40 });
// renderer.setZoomLimits(new double[] { 0, 32, -10, 40 });
renderer.setZoomRate(3.0f);
renderer.setBarSpacing(0.25);
//renderer.set(new double[] {0,30,100,35000});
//Intent in;

List<double[]> xvalues = new ArrayList<double[]>();

int count=1,j=0;
if(flag==0 || flag==1)
{
double xdata[]=new double[31];
while(count<32)
{

xdata[j]=count;
count++;
j++;

}
xvalues.add(xdata);
}
if(flag==2)
{
double xdata[]=new double[7];
count=2005;
while(j<7)
{

xdata[j]=count;
count++;
j++;

}
xvalues.add(xdata);
}


// return ChartFactory.getBarChartIntent(context, buildBarDataset(titles,xvalues,values), renderer,
// Type.DEFAULT);
mchart=ChartFactory.getBarChartView(context,buildBarDataset(titles,xvalues,values), renderer, Type.STACKED);
//LinearLayout layout = (LinearLayout) findViewById(R.id.chart1);
layout.addView(mchart);
mchart.repaint();

//startActivity(in);

}


protected XYMultipleSeriesDataset buildBarDataset(String[] titles, List<double[]> xvalues, List<double[]> values) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
int length = titles.length;
for (int i = 0; i < length; i++) {
//CategorySeries series = new CategorySeries(titles[i]);
XYSeries series = new XYSeries(titles[i]);
double[] v = values.get(i);
double[]x=xvalues.get(i);

int seriesLength = v.length;
for (int k = 0; k < seriesLength; k++) {
if(v[k]==0)
{
v[k]=MathHelper.NULL_VALUE;
}
else
{
series.add(x[k],v[k]);
}
//Log.i("Invent","X Axis"+x[k]);
//series.add(xdata[k],v[k]);
}
dataset.addSeries(series);
for (int k = 0; k < seriesLength; k++) {
if(v[k]==MathHelper.NULL_VALUE)
{
v[k]=0;
}
}
}
return dataset;
}


}

最佳答案

<罢工>我不是 100% 确定,但这里有机会。

首先,当当前建议使用 addXTextLabel 时,您似乎使用了已弃用的方法 addTextLabel。

其次设置 setXLabels(0); with 看起来很奇怪,因为您将拥有超过 0 个 XLabel,也不确定这将如何与所使用的折旧方法一起使用。

第三,我认为 addTextLabel 中的 X 值实际上是一个位置,而不是条形索引。

我既不是 aChartEngine 方面的专家,也没有时间测试您的代码。今晚晚些时候我会做一些测试并用结果编辑这个答案。如果没有其他答案可以帮助您。

(编辑)

测试您的代码后,我得到以下结果:

labels after inserting

这个问题可以通过三种方式解决:

  • 减少标签数量,例如只打印其他。
  • 为标签使用较小的字体大小,我认为在这种情况下这会很难,因为我认为可读性会受到很大影响。
  • 尝试通过例如使轴更长删除另一个轴上的标签。我想你想在那里显示数量标签,所以在这里没有用。

我已经做了一个非常简单和幼稚的跳过所有其他的实现,因为我认为这是这里最有用的解决方案。

for(int axis=1;axis<=31;axis++)
{
if(axis%2 == 1){
String d;
d=String.valueOf(axis);
renderer.addTextLabel(axis,d);
}
}

结果是这样的:

enter image description here

希望这对您有所帮助!

(再次编辑)

对上述问题的新理解仍然是正确的,但这是我现在理解的问题的答案。

要使平移工作,您需要启用平移(已在此问题中完成),然后将 xAxisMax 设置为小于数据集长度的值。在此示例中,最简单的方法是将其设置为例如15f 这是这样做的:

renderer.setXAxisMax(15.0f);

希望这就是您想要的。

关于android - 使用achartengine在android中的条形图上设置滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11224400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com