java - 使用 aChart Engine 使条形图的条形可点击

标签 java android graph charts

使用此代码通过图表引擎显示条形图。现在我想将单击或触摸事件添加到图表的单个条形中。但没有 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/

相关文章:

d3.js - D3 : display graph in tooltip

java - 如何用Java实现子集和问题

Java DatagramSocket 在初始化时卡住

Java:使用分隔符连接基元数组

Java:用MulticastSocket接收时判断接收地址

android - Soundboard App 强制关闭,我不明白为什么

具有模拟位置提供程序的 Android 地理围栏

php - Android 中哪个客户端最好使用 HttpURLConnection 或 HttpClient?

algorithm - 多对一或多对组匹配/分配

java - 使用java比较图结构