2016-10-11 5 views
0

Я использую android-graphview для создания графика Temps со временем для приложения прогнозирования погоды.Android GraphView неправильные шаги оси X при форматировании меток

В моей вкладке «24 часа» я рисую данные с текущего времени и до 24 часов позже. У меня есть прогнозы погоды за 3 часа. Чтобы добиться правильного отображения по оси X, сначала я должен сохранять часы при добавлении, когда меняется день. Поэтому, если текущее время составляет 18:00 для построения данных до 18:00, то значения графика по оси x I составляют: -> 18 21 24 27 30 33 36 39 42. Далее я использую форматтера меток, чтобы изменить x-axis Ярлыки до -> 18 21 0 3 6 9 12 15 18. График отображается правильно в правильных точках, однако метки следуют за шагом 2 вместо 3, но диапазон правильный.

System.out.println («WHAT1?» .. показывает пары входных данных правильно с увеличением часов с шагом 3, но System.out.println («pout» .. и «pour» показывают значения х-оси увеличивают с шагом 2 (хотя быть на правильной позиции) Как я ярлыки будут отображаться на 3hour этапе

Что я делаю неправильно Вот код:.?

DataPoint b= new DataPoint(0,0);//test 
      DataPoint[] point_array= new DataPoint[9]; 
      String[] time_label_24=new String[9]; 

      GraphView graph = (GraphView) findViewById(R.id.graph); 
      hour=Integer.parseInt(Lista.get(x)[15]); 

      for(int i=x;i<=x+8;i++){ 
       if((i-x)<Lista.size()) { 
        b = new DataPoint(hour, Float.parseFloat(Lista.get(i)[4])); 
        point_array[i - x] = b; 
        System.out.println("WHAT1? " + (i - x) + " " + point_array[i - x] + " " + hour); 
        time_label_24[i-x]=Lista.get(i)[15]; 
        hour = hour + 3; 
       } 
      } 

      LineGraphSeries<DataPoint> series = new LineGraphSeries<DataPoint>(point_array); 
      graph.addSeries(series);                


      h=Integer.parseInt(Lista.get(x)[15]); 

      graph.getViewport().setXAxisBoundsManual(true); 

      //graph.getViewport().setMinX(Integer.parseInt(Lista.get(x)[15])-1); 
      //graph.getViewport().setMaxX(Integer.parseInt(Lista.get(x)[15])+8*3+1); 

      graph.getViewport().setMinX(Integer.parseInt(Lista.get(x)[15])); 
      graph.getViewport().setMaxX(Integer.parseInt(Lista.get(x)[15])+8*3); 

      graph.getGridLabelRenderer().setNumHorizontalLabels(9); //9 

      graph.getGridLabelRenderer().setTextSize(12f); 
      graph.getGridLabelRenderer().reloadStyles(); 



      graph.getGridLabelRenderer().setLabelFormatter(new DefaultLabelFormatter() { 
       @Override 
       public String formatLabel(double value, boolean isValueX) { 
        int xylabel; 
        if (isValueX) { 

         if (value < 24) { 
          System.out.println("pout "+value+" " + String.valueOf(value)); 
          xylabel = (int) Math.round(value); 
          return String.valueOf(xylabel); 
         } else{ 
          System.out.println("pour "+value+" " + String.valueOf(value%24)); 
          xylabel = (int) Math.round(value); 
          return String.valueOf(xylabel%24); 
         } 
        }else { 
         xylabel = (int) Math.round(value); 
         return String.valueOf(xylabel); // let graphview generate Y-axis label for us 
        } 
       } 
      }); 
     //////// 


      hour=Integer.parseInt(Lista.get(x)[15]); 
      for(int i=x;i<=x+8;i++){ // Same process for Temp FEEL           
       if((i-x)<Lista.size()) { 
        b = new DataPoint(hour, Float.parseFloat(Lista.get(i)[13])); 
        point_array[i - x] = b; 
        hour = hour + 3; 
        time_label_24[i-x]=Lista.get(i)[15];   
        System.out.println("What2? " + point_array[i - x]); 
       } 
      } 



      LineGraphSeries<DataPoint> series2 = new LineGraphSeries<DataPoint>(point_array); 
      graph.addSeries(series2); 

      series.setTitle("Temp"); 
      series2.setTitle("Feel"); 

      series.setColor(Color.WHITE); 
      series2.setColor(Color.RED); 

      graph.getLegendRenderer().setVisible(true); 
      graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign.TOP); 

Посмотреть на графике:

resulting graph

ответ

0

попытка отключить человека округление через

graph.getGridLabelRenderer().setHumanRounding(false);

 Смежные вопросы

  • Нет связанных вопросов^_^