2017-11-14 23 views
0

int에서 String으로 (실제로는 날짜) XAxis 값을 형식화하고 싶습니다. ArrayList 크기에 도달하면 형식화 프로그램이 중지되지 않고 배열 범위 예외를 벗어납니다. 이것에 대해 내가 뭘 할 수 있니?MPAndroidChart 배열 범위 밖의 값 형식화 자

barEntries=new ArrayList <> (); 
    XAxisLabels=new ArrayList <> (); 
    barEntries.add (new BarEntry (0,0)); 
    XAxisLabels.add ("2017-10-29 09:26:07"); 
    barEntries.add (new BarEntry (1,400)); 
    XAxisLabels.add ("2017-10-28 19:04:22"); 
    barEntries.add (new BarEntry (2,200)); 
    XAxisLabels.add ("2017-10-28 19:05:12"); 
    barEntries.add (new BarEntry (3,300)); 
    XAxisLabels.add ("2017-10-29 09:26:07"); 

      BarDataSet barDataSet = new BarDataSet (barEntries, "DataSet"); 
      barDataSet.setColors (ColorTemplate.COLORFUL_COLORS); 

      BarData barData = new BarData (barDataSet); 

      XAxis xAxis = barChart.getXAxis (); 
      xAxis.setPosition (XAxis.XAxisPosition.BOTH_SIDED); 
      xAxis.setValueFormatter (new MyXAxisValueFormatter (XAxisLabels)); 
      //xAxis.setGranularity (1); 
      xAxis.setCenterAxisLabels (true); 
      //xAxis.setAxisMinimum (1); 
      barChart.setData (barData); 
      barChart.notifyDataSetChanged (); 
      barChart.invalidate (); 

내 포맷터 : 그것은 작동

public class MyXAxisValueFormatter implements IAxisValueFormatter{ 
     int counter=0; 
     private ArrayList <String> mValues = new ArrayList <> (); 
     public MyXAxisValueFormatter(ArrayList<String> values) 
     { 
      this.mValues=values; 
     } 
     @Override 
     public String getFormattedValue (float value, AxisBase axis) { 
      String x; 
      value=value+counter*0.3f; 
      counter++; 
      x= mValues.get ((int)value); 
      return x; 
     } 
} 

Application screenshot

답변

0
public class MyXAxisValueFormatter implements IAxisValueFormatter { 
private List labels; 

public MyXAxisValueFormatter(List<String> labels) { 
    this.labels = labels; 
} 

@Override 
public String getFormattedValue(float value, AxisBase axis) { 
    try { 
     int index = (int) value; 
     return labels.get(index); 
    } catch (Exception e) { 
     return ""; 
    } 
} 
} 
+0

는 ... 단지 문자열로 부동의 변환을 확인합니다. 이 방법은 arraylist를 제공 할 필요가없는 각 값을 자동으로 호출합니다. 그것이 작동하는 경우에 대답으로이 포스트를 표시하는 것을 잊지 말라. 해피 코딩 친구 :) –

+0

하지만 x 축에 서명하는 데 필요한 문자열이 어디에 있는지 어떻게 알 수 있습니까? –

+0

기본적으로 선택된 축에서 축 값 형식화 기가 호출됩니다. 따라서 특정 축에서 호출하면 모든 레이블의 값을 가져 와서 하나씩 변환합니다. –