2014-01-19 4 views
1

Мне сложно понять, как реализовать время в X-оси графика в Android?Android: GraphView Как реализовать время по оси X?

Это мой код:

for (int i = 0; i < listSize; i++) 
      { 
       String[] onlyReading = mData.get(i).getReading().split(" "); 
       readingList[i] = Double.parseDouble(onlyReading[0]); 
       String date = mData.get(i).getUnFormatedDate(); 
       String[] temp = date.split(" "); 
       String[] dateTemp = null; 
       String[] timeTemp = null; 

       if(temp.length > 0) 
       { 
        dateTemp = temp[0].trim().split("-"); 
        timeTemp = temp[1].trim().split(":"); 

        Date dateObj = new Date(); 
        String year = "0"; 
        if(dateTemp != null) 
        { 
         dateObj.setDate(Integer.parseInt(dateTemp[0])); 
         dateObj.setMonth(Integer.parseInt(dateTemp[1]) - 1); 
         year = dateTemp[2].trim(); 
         if(dateTemp[2].trim().length() == 4) 
         { 
          year = dateTemp[2].substring(2, 4); 
         } 
         dateObj.setYear(Integer.parseInt(year)+100); 
        } 
        if(timeTemp != null) 
        { 
         calendar = new GregorianCalendar(Integer.parseInt(year) + 2000, Integer.parseInt(dateTemp[1]) - 1, Integer.parseInt(dateTemp[0]), Integer.parseInt(timeTemp[0]), Integer.parseInt(timeTemp[1])); 
        } 

        dateObj = new Date(calendar.getTimeInMillis()); 
        dateList[i] = dateObj; 
       } 
      } 

      if(dateList.length > 0) 
      { 
       //dates.clear(); 
       //values.clear(); 
       //readingData.clear(); 
       //readingDate.clear(); 

       GraphViewData[] data = new GraphViewData[dateList.length]; 





       LineGraphView graphView = new LineGraphView(
          getActivity() // context 
          , "" // heading 
        ); 


       for (int i = 0; i < listSize; i++) 
       { 
        data[i] = new GraphViewData(Double.valueOf(i), readingList[i]); 
       } 

       GraphViewSeries exampleSeries = new GraphViewSeries(data); 
       graphView.addSeries(exampleSeries); 
       graphView.setDrawBackground(false); 
       ((LineGraphView) graphView).setDrawDataPoints(true); 
       graphView.getGraphViewStyle().setGridColor(0); 
       graphView.getGraphViewStyle().setHorizontalLabelsColor(Color.WHITE); 
       graphView.getGraphViewStyle().setVerticalLabelsColor(Color.WHITE); 
       graphView.getGraphViewStyle().setNumHorizontalLabels(5); 
       graphView.getGraphViewStyle().setNumVerticalLabels(5); 
       graphView.setManualYAxisBounds(400, 0); 
       mGraphParent.addView(graphView); 
      } 
     } 

Даже если добавить значения по оси Y, я не могу понять, как добавить значения времени к оси Х?

ответ

1

трюк заключается в том, чтобы просто преобразовать время в секундах или миллисекундах (время unix), и вы это как значение X.

В проекте GraphView-Demos есть пример. Посмотрите на:

https://github.com/jjoe64/GraphView-Demos/blob/master/src/com/jjoe64/graphviewdemos/CustomLabelFormatterActivity.java#L68

+1

ссылка получает 404 - это должно быть, вероятно, https://github.com/jjoe64/GraphView-Demos/blob/a38c1ffa47ef34bc34fed1e80d7caac8e18f87e4/app/src/main/java/com/jjoe64/graphview_demos/fragments/DateAsXAxis.java –

2

Я была такая же проблема. Самый простой способ - преобразовать Time в миллисекунды. Использование григорианского календаря может быть более полезным, поскольку методы в Дате устарели.

Calendar cal=new GregorianCalendar(2014,6,12,9,30,0); 
data[i]=new GraphViewData(cal.getTimeInMillis,VALUE); 

Затем установите CustomLabelFormatter.

graphView.setCustomLabelFormatter(new CustomLabelFormatter() { 
     @Override 
     public String formatLabel(double value, boolean isValueX) { 
      // TODO Auto-generated method stub 
      if (isValueX) { 
       Date d = new Date((long) (value)); 
       return (dateFormat.format(d)); 
      } 
      return "" + (int) value; 
     } 
    }); 

Время/дата отображается в формате, указанном в формате даты.