2016-05-13 2 views
0

У меня есть горизонтальная гистограмма с значениями X. Сейчас я могу только создать BarEntry со значением поплавка, как это:MPAndroidChart: Как отформатировать BarEntry как строку?

BarEntry barEntry = new BarEntry((float)iAmountInCents/100, ++ index,item.getKey()); 
valueSet1.add(barEntry); 

Я также добавил пользовательские форматировщик:

public class MyYAxisValueFormatter implements YAxisValueFormatter { 

     private DecimalFormat mFormat; 

     public MyYAxisValueFormatter() { 
      mFormat = new DecimalFormat("###,###,##0.00"); 
     } 

     @Override 
     public String getFormattedValue(float value, YAxis yAxis) { 
      // write your logic here 
      // access the YAxis object to get more information 
      return "₹. " + mFormat.format(value) ; 
     } 
    } 

YAxis leftAxis = mChart.getAxisLeft(); 
     leftAxis.setValueFormatter(new MyYAxisValueFormatter()); 

     YAxis rightAxis = mChart.getAxisRight(); 
     rightAxis.setValueFormatter(new MyYAxisValueFormatter()); 

Но метод GetFormattedValue() никогда не вызывается , что приводит в чем-то подобном на панели в диаграмме: 0.400. Я хочу, чтобы это значение на гистограмме выглядело так «$ 0,40». Как я могу это достичь?

enter image description here

ответ

0

Вы устанавливаете форматировщик в неправильном месте. Вы устанавливаете форматтер на YAxis. Вместо этого вам нужно установить форматтер на объекте BarDataSet, который вы назначаете диаграмме.

Создание класса Formatter, простирающийся от ValueFormatter

public class MyValueFormatter implements ValueFormatter { 

    private DecimalFormat mFormat; 

    public MyValueFormatter() { 
     mFormat = new DecimalFormat("###,###,###,##0.0"); 
    } 

    @Override 
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { 
     return mFormat.format(value) + " $"; 
    } 
} 

Вы должны поставить форматировщик всякий раз, когда вы назначаете набор данных диаграммы с помощью

BarDataSet set1 = new BarDataSet(yVals1, "DataSet 1"); 
set1.setValueFormatter(new MyValueFormatter());