在版本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