使用此代码通过图表引擎显示条形图。现在我想将单击或触摸事件添加到图表的单个条形中。但没有 Onclick 或 Ontouch 事件。如何为栏设置 Click 监听器?
public class BarGraph {
public Intent getIntent(Context context) {
int y[] = { 25, 10, 15, 20 };
CategorySeries series = new CategorySeries("Bar1");
for (int i = 0; i < y.length; i++) {
series.add("Bar" + (i + 1), y[i]);
}
XYMultipleSeriesDataset dataSet = new XYMultipleSeriesDataset(); // collection
// of
// series
// under
// one
// object.,there
// could
// any
dataSet.addSeries(series.toXYSeries()); // number of series
// customization of the chart
XYSeriesRenderer renderer = new XYSeriesRenderer(); // one renderer for
// one series
renderer.setColor(Color.RED);
renderer.setDisplayChartValues(true);
renderer.setChartValuesSpacing((float) 5.5d);
renderer.setLineWidth((float) 10.5d);
XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); // collection
// multiple
// values
// for
// one
// renderer
// or
// series
mRenderer.addSeriesRenderer(renderer);
mRenderer.setChartTitle("Demo Graph");
// mRenderer.setXTitle("xValues");
mRenderer.setYTitle("Rupee");
mRenderer.setZoomButtonsVisible(true);
mRenderer.setShowLegend(true);
mRenderer.setShowGridX(true); // this will show the grid in graph
mRenderer.setShowGridY(true);
// mRenderer.setAntialiasing(true);
mRenderer.setBarSpacing(.5); // adding spacing between the line or
// stacks
mRenderer.setApplyBackgroundColor(true);
mRenderer.setBackgroundColor(Color.BLACK);
mRenderer.setXAxisMin(0);
// mRenderer.setYAxisMin(.5);
mRenderer.setXAxisMax(5);
mRenderer.setYAxisMax(50);
//
mRenderer.setXLabels(0);
mRenderer.addXTextLabel(1, "Income");
mRenderer.addXTextLabel(2, "Saving");
mRenderer.addXTextLabel(3, "Expenditure");
mRenderer.addXTextLabel(4, "NetIncome");
mRenderer.setPanEnabled(true, true);
mRenderer.setClickEnabled(true);
// mRenderer
// will fix the chart position
Intent intent = ChartFactory.getBarChartIntent(context, dat`enter code here`aSet,
mRenderer, Type.DEFAULT);
return intent;
}
}
为了获取 ClickListener,我尝试了以下代码:
ChartFactory.getBarChartView(context, dataSet, mRenderer,Type.DEFAULT).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("============view", "Onclick");
}
});
然后事件不会触发...
最佳答案
刚刚遇到了同样的问题,所以我想我知道你陷入了困境。
您的 onClick 方法中需要这一行,它可以让您控制选定的栏或数据点(取决于图表的类型):
SeriesSelection seriesSelection = chartView.getCurrentSeriesAndPoint();
其中,chartView 是您的 GraphicalView 元素。
现在您已从图表中选择了元素,并且您有机会根据您的需要使用它。
好的做法是检查它是否为空,这意味着您单击了图表上的空白区域。例如:
if (seriesSelection == null) {
// do something or not
} else {
// do something cool
}
您可以使用以下方法访问单击字段的数据:
seriesSelection.getSeriesIndex() // in case you have more than one series
seriesSelection.getPointIndex() // gets place in a series
seriesSelection.getValue() // gets value for Y axis
seriesSelection.getXValue() // gets value of X axis
希望这有帮助!
关于java - 使用 aChart Engine 使条形图的条形可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731961/