2014-01-02 3 views
4

Я попытался сделать график, где ось х содержит даты в виде строки. Так что я использую customLabelFormatter, он дает мне все даты одного года около 365 дат.Android-GraphView с пользовательским горизонтальным листом не отображается правильно

Теперь проблема в оси x показывает все даты, но в очень сопряженном пространстве, поэтому она выглядит как прямая линия.

Вот мой код:

public class TestActivity extends Activity { 

private RelativeLayout grapahcontainer; 

private String[] dates; 
private Random rand; 
private SimpleDateFormat dateFormat = new SimpleDateFormat("d/M"); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_test); 

    grapahcontainer = (RelativeLayout) findViewById(R.id.graph); 
    rand = new Random(); 
    dates = new String[366]; 
    getDates(); 

    int size = dates.length; 

    GraphViewData[] data = new GraphViewData[size]; 
    for (int i = 0; i < size; i++) { 
     data[i] = new GraphViewData(i, rand.nextInt(800)); 
    } 


    LineGraphView graphView = new LineGraphView(this, "GraphViewDemo"); 
    graphView.setCustomLabelFormatter(new CustomLabelFormatter() { 

     @Override 
     public String formatLabel(double value, boolean isValueX) { 
      // TODO Auto-generated method stub 
      if (isValueX) { 
       return dateFormat.format(new Date()); 
      } 
      return null; 
     } 
    }); 

    graphView.setDrawDataPoints(true); 
    graphView.setDataPointsRadius(5f); 

    // add data 
    graphView.addSeries(new GraphViewSeries(data)); 


    graphView.getGraphViewStyle().setGridColor(Color.TRANSPARENT); 
    graphView.getGraphViewStyle().setHorizontalLabelsColor(Color.GRAY); 
    graphView.getGraphViewStyle().setVerticalLabelsColor(Color.GRAY); 
    graphView.getGraphViewStyle().setTextSize(10); 

    graphView.getGraphViewStyle().setVerticalLabelsWidth(30); 

    graphView.setHorizontalLabels(dates); 
    graphView.setVerticalLabels(getResources().getStringArray(
      R.array.verticalLbls)); 


    // set view port, start=0, size=8 
    graphView.setViewPort(0, 8); 
    graphView.setScrollable(true); 

    RelativeLayout.LayoutParams graphViewpParams = new RelativeLayout.LayoutParams(
      300, 500); 
    graphView.setLayoutParams(graphViewpParams); 
    grapahcontainer.addView(graphView); 
} 

private void getDates() { 

    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.DATE, 1); 
    calendar.add(Calendar.DATE, -365); 
    dates[0] = (dateFormat.format(calendar.getTime())); 
    for (int i = 0; i < 365; i++) { 
     calendar.add(Calendar.DATE, 1); 
     String dateStr = dateFormat.format(calendar.getTime()); 
     // System.out.println("Date : " + dateStr); 
     dates[i + 1] = dateStr; 
    } 
} 

}

+0

вы найдете любое решение для этого? я столкнулся с той же проблемой –

ответ

1

вы можете установить счетчик этикеток с этими двумя методами GraphViewStyle:

> setNumHorizontalLabels(int numHorizontalLabels) 
> setNumVerticalLabels(int numVerticalLabels) 
+0

У меня такая же проблема. Я попытался использовать «setNumHorizontalLabels», но это не сработает, если вы установите свои метки вручную (используя setHorizontalLabels()). Любая идея обходного пути для этого? –

+1

Если вы используете статические метки (setHorizontalLabels()), то полностью зависит от вас, сколько меток вы используете и, следовательно, setNumHorizontalLabels не имеет смысла. – appsthatmatter

+0

Уверен, но можно ли использовать setHorizontalLabels() и установить максимальное количество меток, отображаемых на экране? Например: я использовал setHorizontalLabels(), передавая список с 10 значениями, но я установил setNumHorizontalLabels только в 5 значений. При этом было бы здорово показать 5 значений на странице, имея возможность прокручивать остальные значения. –