首页 文章

MPAndroidChart:如何将BarEntry格式化为字符串?

提问于
浏览
0

我有一个带X值的水平条形图 . 现在我只能用这样的浮点值创建一个BarEntry:

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

我还添加了 custom formatter

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 . 我希望条形图上的这个值看起来像这个“$ .40” . 我怎样才能做到这一点?

enter image description here

1 回答

  • 0

    您正在将格式化程序设置在错误的位置 . 您正在YAxis上设置格式化程序 . 相反,您需要在要分配给图表的BarDataSet对象上设置格式化程序 .

    创建一个从 ValueFormatter 扩展的Formatter类

    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());
    

相关问题