10.格式化轴值(AxisValueFormatter)

在版本v3.0.0中引入,此界面允许在绘制之前自定义样式XAxis和YAxis值。

创建格式化程序

所有需要对轴进行自定义格式化的值都是创建一个实现IAxisValueFormatter接口的类,如下所示。该格式器用于始终将轴的值格式化为1位十进制数字。

public class MyYAxisValueFormatter implements IAxisValueFormatter {

    private DecimalFormat mFormat;

    public MyAxisValueFormatter() {

      //格式值为1位十进制数 
        mFormat = new DecimalFormat("###,###,##0.0");
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
          // “value”表示标签在轴上的位置(x或y)
        return mFormat.format(value) + " $";
    }

    /** 只有返回数字时才需要这个,否则返回0 */
    @Override
    public int getDecimalDigits() { return 1; }
}

下面的示例显示了如何将String[]数组绘制到轴上:

public class MyXAxisValueFormatter implements IAxisValueFormatter {

    private String[] mValues;

    public MyXAxisValueFormatter(String[] values) {
        this.mValues = values;
    }

    @Override
    public String getFormattedValue(float value, AxisBase axis) {
         // “value”表示标签在轴上的位置(x或y)
        return mValues[(int) value];
    }

    /** 只有返回数字时才需要这个,否则返回0 */
    @Override
    public int getDecimalDigits() { return 0; }
}

设置格式器

在格式化程序创建之后,只需将其设置为您选择的轴:

YAxis left = chart.getAxisLeft();
left.setValueFormatter(new MyYAxisValueFormatter());

String[] values = new String[] { ... };

XAxis xAxis = chart.getXAxis();
xAxis.setValueFormatter(new MyXAxisValueFormatter(values));

而不是从轴最小值到轴最大值的默认值,轴现在将绘制格式化程序指定的数据。

限制间隔

如果您使用基于数组索引的格式化程序(如上所述),将轴的最小间隔限制为“1”是有意义的:

axis.setGranularity(1f); //将间隔限制为1(最小)

这将防止格式化程序绘制重复的轴标签(由轴间隔<1)引起。只要图表的“缩放级别”足够高,它将停止重新计算更小的间隔。

预定格式化器

  • LargeValueFormatter:可用于格式化大值>“1.000”。将“1.000”的值变为“1k”,“1.000.000”将为“1m”(百万),“1.000.000.000”为“1b”(十亿),像万亿的值将为“1t ”。
  • PercentFormatter:用于在每个值与1位十进制数字之后显示“%”号。特别有用的PieChart。50 - > 50.0%

示例格式化器

  • DayAxisValueFormatter:此格式化程序将提供的值转换为日期String,根据比例改变字符串。
    传统格式机

发布V3.0.0之前,有单独的格式化XAxis和YAxis。这些格式化程序的文档可以在这里找到:

  • XAxisValueFormatter
  • YAxisValueFormatter
坚持原创技术分享,您的支持将鼓励我继续创作!
0%