我有一个应用程序,可以根据数据库值创建条形图。在我的主要活动中,我有这个功能:
public void onClick(View view){
BarGraph bar = new BarGraph();
bar.setCustomerCD(String.valueOf(spinner1.getSelectedItem()));
yagoDB.open();
ArrayList<String> stringList = yagoDB.getCustomerItem(String.valueOf(spinner1.getSelectedItem()));
String[] itemArray = new String[stringList.size()];
String[] returnedArray = stringList.toArray(itemArray);
bar.setItemCD(returnedArray);
bar.setMax(yagoDB.getQtyMax(String.valueOf(spinner1.getSelectedItem())));
bar.setItemCount(yagoDB.getItemCDCount(String.valueOf(spinner1.getSelectedItem())));
ArrayList<Integer> stringList2 = yagoDB.getCustomerQtyInt(String.valueOf(spinner1.getSelectedItem()));
yagoDB.close();
int[] returnedQty = convertIntegers(stringList2);
bar.setQty(returnedQty);
Intent barIntent = bar.getIntent(this);
startActivity(barIntent);
}
在这个函数中,我基本上是在创建一个BarGraph类的实例,初始化它的一些变量,然后我调用它的getIntent函数。这是BarGraph类中的getIntent()函数,该类的其余部分包含setter和getter:
public Intent getIntent(Context context) {
int y[] = Qty;
CategorySeries series = new CategorySeries("Bar1");
for (int i = 0; i < y.length; i++) {
series.add("Bar" + (i + 1), y[i]);
}
// collection of series under one object, there could any number of series
XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset();
dataSet.addSeries(series.toXYSeries());
// customization of the chart
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setColor(Color.BLUE);
renderer.setDisplayChartValues(true);
renderer.setChartValuesSpacing((float) 50d);
renderer.setChartValuesTextSize(30);
renderer.setLineWidth((float) 10.5d);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer();
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("Sales for " + customerCD);
mRenderer.setXTitle("\n \n Item Codes");
mRenderer.setAxisTitleTextSize(30);
mRenderer.setChartTitleTextSize(30);
mRenderer.setLabelsTextSize(20);
mRenderer.setYTitle("\n\n\n\n\n\n\n Number of Orders");
mRenderer.setLabelsColor(Color.BLACK);
mRenderer.setZoomButtonsVisible(true);
mRenderer.setShowLegend(true);
mRenderer.setLegendTextSize(25);
mRenderer.setShowGridX(true); // this will show the grid in graph
mRenderer.setShowGridY(true);
mRenderer.setAxesColor(Color.BLACK);
mRenderer.setGridColor(Color.BLACK);
mRenderer.setYLabelsColor(0, Color.BLACK);
mRenderer.setXLabelsColor(Color.BLACK);
mRenderer.setBarSpacing(.5);
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.WHITE);
mRenderer.setMarginsColor(Color.WHITE);
mRenderer.setXAxisMin(0);
mRenderer.setXAxisMax(itemCount + 1);
mRenderer.setXLabels(0);
mRenderer.setYAxisMin(0);
mRenderer.setYAxisMax(max+1);
//right, top, left, bottom
mRenderer.setMargins(new int[]{30,50,100,10});
mRenderer.setXLabelsPadding(10);
mRenderer.setYLabelsPadding(20);
for(int i = 0 ; i < ItemCD.length; i++){
mRenderer.addXTextLabel(i+1, ItemCD[i]);
}
mRenderer.setZoomEnabled(true, false);
//mRenderer.setClickEnabled(true);
mRenderer.setPanEnabled(true, false); // will fix the chart position
//xMin, xMax, yMin, yMax
mRenderer.setPanLimits(new double[]{0, itemCount + 1, 0, max + 1});
mRenderer.setOrientation(Orientation.VERTICAL);
Intent intent = ChartFactory.getBarChartIntent(context, dataSet,
mRenderer, Type.DEFAULT);
return intent;
}
我已经搜索了关于如何使用和onClickListeners到AChartEngine生成的Graph的示例和教程,但是大多数都涉及在同一个类/活动中生成图形。但是,我注意到那个不需要调用意图的例子,我对它的运作方式感到很困惑。
此外,我遇到了一个问题,即我将setClickEnabled()
设置为true并禁用setPanEnabled()
使其无法正常运行。
所以,有几个问题:
如何在AChartEngine生成的图形中的单个条形图上添加onClickListener()?
有没有办法启用setClickEnabled()
并使其不与setPanEnabled()
发生冲突?