【问题标题】:AChartEngine - How to Add onClickListener and conflict between setClickEnabled() and setPanEnabled()AChartEngine - 如何添加 onClickListener 和 setClickEnabled() 和 setPanEnabled() 之间的冲突
【发布时间】:2013-10-31 09:00:30
【问题描述】:

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

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()

【问题讨论】:

    标签: android achartengine


    【解决方案1】:

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

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

    【讨论】:

    • 所以我必须将我的 BarGraph 和 MainActivity 结合起来?我试图在第 157 行之后合并代码,但它不起作用。我试图将代码调整到我的 MainActivity 的 onResume() 上,但效果不佳。将复制示例代码并尝试对其进行操作。
    • 尝试创建一个视图而不是一个活动。
    猜你喜欢
    • 2013-05-04
    • 1970-01-01
    • 2019-05-30
    • 2012-06-27
    • 2012-03-06
    • 2011-05-02
    • 2012-11-25
    • 2013-10-27
    • 2014-03-02
    相关资源
    最近更新 更多