0

我有一个基于数据库值创建条形图的应用程序。在我的主要活动中,我有这个功能:

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;
}

我在 Google 上搜索了如何和 onClickListeners 到 AChartEngine 生成的图表的示例和教程,但其中大多数涉及在同一类/活动中生成图表。但是,我注意到该示例不必调用意图,我对它的工作原理感到非常困惑。

另外,我有一个问题,我设置setClickEnabled()为 true 并且它无法setPanEnabled()正常运行。

所以,几个问题:

  1. 如何在 AChartEngine 生成的图表中的各个条形图上添加 onClickListener()?

  2. 有没有办法启用setClickEnabled()并且不冲突setPanEnabled()

4

1 回答 1

1

对于第一个问题,请参阅示例,从第 157 行开始。

对于第二个问题,您可以同时启用它们,但是当您平移时,它们setOnClickListener也会运行。

于 2013-10-31T11:47:42.057 回答