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() 関数は次のとおりです。クラスの残りの部分にはセッターとゲッターが含まれています。

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

AChartEngine によって生成されたグラフへの方法と onClickListeners の例とチュートリアルをグーグルで検索しましたが、それらのほとんどは同じクラス/アクティビティでグラフを生成することを伴います。しかし、インテントを呼び出す必要のない例に気付き、それがどのように機能したかについて非常に困惑しています。

また、setClickEnabled()true に設定するとsetPanEnabled()正しく機能しないという問題がありました。

それで、いくつかの質問:

  1. AChartEngine によって生成されたグラフの個々のバーに onClickListener() を追加するにはどうすればよいですか?

  2. 有効setClickEnabled()にして競合しないようにする方法はありsetPanEnabled()ますか?

4

1 に答える 1