2013-10-31 28 views
0

我有一個基於數據庫值創建條形圖的應用程序。在我的主要活動,我有這樣的功能:AChartEngine - 如何添加onClickListener和setClickEnabled()和setPanEnabled()之間的衝突

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

} 

在這個函數中,我基本上創造我光柱類的一個實例,初始化一些變量,在這之後,我把它getIntent功能。這裏是條形圖類getIntent()函數,該類的其餘部分包含getter和setter方法:

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

回答

1

對於第一個問題,請參見this示例,從行#157開始。

對於第二個問題,您可以啓用它們,但是當您平移時,setOnClickListener也將運行。

+0

所以我必須結合我的BarGraph和MainActivity?我試圖在第157行之後加入代碼,但沒有奏效。我試圖將代碼調整到我的MainActivity的'onResume()'上,並且它不起作用。將複製示例代碼並嘗試操作它。 – Razgriz

+0

嘗試創建一個視圖而不是一個活動。 –