我在iOS中使用了Charts库,其中提供了'xAxis.wordWrapEnabled = true'来阻止x轴标签彼此重叠。
对于x轴值,Android上似乎没有相同的选项。 (仅适用于图例)
请问我如何阻止x轴标签在Android MPChart库中重叠?
答案 0 :(得分:0)
您可以在下面自定义类似XAxis的代码。它将自动将冗长的字符串分解为下一行,以避免重叠。
设置绘制多条线的偏移量
chart.getXAxis().setYOffset(12);
chart.setXAxisRenderer(new MyXAxisRenderer(chart.getViewPortHandler(),chart.getXAxis(),chart.getTransformer(YAxis.AxisDependency.LEFT), labelCount));
public class MyXAxisRenderer extends XAxisRenderer {
private int labelCount;
public MyXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer trans,
int labelCount) {
super(viewPortHandler, xAxis, trans);
this.labelCount= labelCount;
}
@Override
protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) {
int offset = 24;
float widthUnit = mViewPortHandler.contentWidth() / labelCount - offset;
Rect rect = new Rect();
int labelFittingLength = formattedLabel.length();
mAxisLabelPaint.getTextBounds(formattedLabel, 0, labelFittingLength, rect);
while (rect.width() > widthUnit) {
labelFittingLength--;
mAxisLabelPaint.getTextBounds(formattedLabel, 0, labelFittingLength, rect);
}
// space 5dp from XAxis
float yPreviousLine = y - mXAxis.getYOffset() + 15;
if (labelFittingLength == formattedLabel.length()) {
super.drawLabel(c, formattedLabel, x, yPreviousLine, anchor, angleDegrees);
} else {
int spaceMultipleLine = 8;
List<String> subLabels = splitByNumber(formattedLabel, labelFittingLength);
for (String subLabel : subLabels) {
Utils.drawXAxisValue(c, subLabel, x, yPreviousLine, mAxisLabelPaint, anchor, angleDegrees);
yPreviousLine = yPreviousLine + rect.height() + spaceMultipleLine;
}
}
}
private List<String> splitByNumber(String s, int size) {
List<String> strings = new ArrayList<>();
int index = 0;
while (index < s.length()) {
strings.add(s.substring(index, Math.min(index + size, s.length())));
index += size;
}
return strings;
}
}