AChartEngine - 如何在setClickEnabled()和setPanEnabled()之间添加onClickListener和冲突

时间:2013-10-31 09:00:30

标签: android achartengine

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

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()使其无法正常运行。

所以,有几个问题:

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

  2. 有没有办法启用setClickEnabled()并使其不与setPanEnabled()发生冲突?

1 个答案:

答案 0 :(得分:1)

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

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