android - 具有 1 个值的数组的自定义 X 标签上的时间戳

标签 android achartengine

当 ArrayList 中只有一个值时,我在 aChartEngine 中遇到了 xlabels 的问题。我为折线图生成了自己的 XLabel,但是当有一个数据数组值时,我在生成的 XLabel 之上得到了一个不需要的时间戳。

我的代码:

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

设置图表设置:

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

当有多个值时,它会使用我的自定义 XLabel(格式为 MMM-yyyy)很好地绘制图表,但当 ArrayList 中只有一个值时,它会生成时间戳。

这是一张图片:

enter image description here

最佳答案

这确实是一个错误。您可以下载一个版本,包括对其功能的修复 here .

关于android - 具有 1 个值的数组的自定义 X 标签上的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856118/

相关文章:

android - "Failed to install the following Android SDK packages as some licences have not been accepted"错误

java - aChartEngine 中的日期图表

java - 我们可以在 AchartEngine 中为 Dataset 创建一个新方法吗?

android - 启动 SDK 管理器时出错 : "find_java.exe is not compatible with the version of Windows you' re running"

android - 当我尝试在 ubuntu 上的 Android Studio 上运行模拟器时出现 "PANIC: Could not find..."

android - 录音机播放器 Rails 移动友好

android - Android 的实时折线图?

android - WPD/MTP 可移植设备,内容始终为空(Windows、VisualStudio 2012、VB.NET)

android - 如何在图表引擎中为 Y 轴上的每个值设置网格线?

android - 隐藏图表底部显示的点样式