1

ArrayList に 1 つの値がある場合、aChartEngine の xlabels でこの問題が発生します。折れ線グラフ用に独自の XLabel を生成しましたが、データ配列値が 1 つある場合、生成した XLabels の上に不要な TimeStamp が表示されます。

私のコード:

private XYMultipleSeriesDataset getDemoDataset() {

        Calendar cal = Calendar.getInstance();
        Date date = new Date();

        date_value = new String[list.size()];
        value_value = new String[list.size()];

        for(int k = 0; k < list.size(); k++){
            date_value[k] = list.get(k).get(DATE);
            value_value[k] = list.get(k).get(VALUE);
        }


        TimeSeries series = new TimeSeries("Line Graph");

        for(int j=0; j < date_value.length; j++) {


                series.add(formatter.stringToDate(date_value[j]), Integer.parseInt());

                }   

            XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
                 dataset.addSeries(series);
         return dataset;
         }

setChartSetting:

private void setChartSetting(XYMultipleSeriesRenderer renderer){
        renderer.setXRoundedLabels(true);
        renderer.setXTitle("DATES");
        renderer.setYTitle(kpiname);
        renderer.setApplyBackgroundColor(true);
        renderer.setFitLegend(false);
        renderer.setAxesColor(Color.DKGRAY);
        renderer.setShowGrid(true);
        renderer.setZoomEnabled(false);
        renderer.setXLabels(0);
        renderer.setYLabels(10);
        renderer.setZoomEnabled(false, false);
        renderer.setPanEnabled(false, false);





        //String[] date_value = new String[list.size()];
        //String[] value_value = new String[list.size()];

        if(list.isEmpty() || list.size() == 0 || list == null ){
            return;
        } 

        if(name.equals(RECOVERED) || name.equals(CONVERSION)){
            largest_size = (int)Double.parseDouble(value_value[0]);
        }else{
               if(!(value_value.length == 0)){
               largest_size = Integer.parseInt(value_value[0]);
              }else{
                  return;
              }
        }

        //used to determine the maximum value for the y-axis
        for(int x =0; x < value_value.length; x++){

                if(Integer.parseInt(value_value[x]) > largest_size){
                    largest_size = Integer.parseInt(value_value[x]);
                }   
            }

        renderer.setYAxisMax((double)largest_size);
        renderer.setYAxisMin(0);

        int value_size = value_value.length;
        int m = 0;
        //int add =  value_size/10;
        int add =  largest_size/10;

        /*instance variables for setting the labels on the X-Axis based on weather the values in the array are
         * more than 10 items or less*/


        double d;
        Long l;
        Long l1;
        double d1;

        if(date_value.length <= 1){

          int last = date_value.length;
          int mod = 0;
              //int add_mod = Math.round(last/10);
              int add_mod = (int)Math.round((double)Math.round(last));

                l = Long.valueOf(formatter.stringToDateReport(date_value[0]).getTime());
                d = l.doubleValue();
                   /*tried this to see if i can remove the timestamp*/
                //renderer.addXTextLabel(0.0, "");
                //renderer.removeXTextLabel(0.0); 
                //renderer.clearXTextLabels();
                renderer.addXTextLabel(d, date_value[0]);

        }


            else if(date_value.length < 10){    


            for(int i = 0; i < date_value.length; i++){

                  if(i >= date_value.length){
                      break;
                  }

            l = Long.valueOf(formatter.stringToDateReport(date_value[i]).getTime());
            d = l.doubleValue();
            renderer.addXTextLabel(d, date_value[i]);

           }

        } else if(date_value.length >= 10){

              int last = date_value.length;
              //int last = 28;
              //Log.d(TAG, "last is " + last);      
              int mod = 0;
              //int add_mod = Math.round(last/10);
              int add_mod = (int)Math.round((double)Math.round(last) /10);  // do this to get the decimal value with a double and then round to get nearset whole with int

              for(int i =0; i < date_value.length; i++){

                  if(mod >= date_value.length){
                      break;
                  }


                  l1 = Long.valueOf(formatter.stringToDateReport(date_value[mod]).getTime());
                  d1 = l1.doubleValue();

                  renderer.addXTextLabel(d1, date_value[mod]); 
                  mod+=add_mod;
              }
        }

    } 
}

その後:

chartView = ChartFactory.getLineChartView(context, getDemoDataset(), setChartSettings(renderer));

複数の値がある場合、カスタム XLabels (形式は MMM-yyyy) でグラフを適切にプロットしますが、ArrayList に値が 1 つしかない場合は、そのタイム スタンプを生成します。

ここに画像があります:

ここに画像の説明を入力

4

1 に答える 1

1

これは確かにバグでした。it 機能の修正を含むバージョンは、こちらからダウンロードできます。

于 2013-02-13T15:42:45.963 に答える