Я пытаюсь показать метку оси X, чтобы перейти к 2 строкам, когда они длинны. Как добиться этого в LineChart? См. Снимок экрана ниже. Я хочу, чтобы время переходило во вторую строчку, а не оставалось рядом с ней.
В библиотеке MPAndroidChart, как переносить метки X Axis на две строки, если они долго?
Ответ 1
Для таких, как я, которые хотят достичь этого, но сохраняйте оригинальную библиотеку, вот простое решение, вдохновленное модификациями @fgueli. Это относится только к одной строке разрыва (добавьте "\n" в свои метки), но вы можете легко адаптировать ее к вашим потребностям.
-
Подкласс XAxisRenderer
public class CustomXAxisRenderer extends XAxisRenderer { public CustomXAxisRenderer(ViewPortHandler viewPortHandler, XAxis xAxis, Transformer trans) { super(viewPortHandler, xAxis, trans); } @Override protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) { String line[] = formattedLabel.split("\n"); Utils.drawXAxisValue(c, line[0], x, y, mAxisLabelPaint, anchor, angleDegrees); Utils.drawXAxisValue(c, line[1], x + mAxisLabelPaint.getTextSize(), y + mAxisLabelPaint.getTextSize(), mAxisLabelPaint, anchor, angleDegrees); } }
-
Установите этот рендерер на нужный график
lineChart.setXAxisRenderer(new CustomXAxisRenderer(lineChart.getViewPortHandler(), lineChart.getXAxis(), lineChart.getTransformer(YAxis.AxisDependency.LEFT)));
- Наслаждайтесь!
Ответ 2
Я изменил библиотеку, чтобы разрешить многострочную метку на xAxis, используя \n
https://github.com/fabriziogueli/MPAndroidChart/tree/axis_multiline_labels
Он работает прямо сейчас, но нуждается в дальнейшем тестировании и, возможно, в разработке или настройке кода.
XAxis xAxis = mChart.getXAxis();
xAxis.setMultiLineLabel(true);
Затем вы можете использовать, например, SimpleDateFormat, как это:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy\nHH:mm a");
Возможно, вам нужно установить дополнительное нижнее смещение на ваш график:
mChart.setExtraBottomOffset(50);
Ответ 3
Это похоже на то, что вам нужно будет реализовать самостоятельно, изменив библиотеку в соответствии с вашими потребностями.
В настоящее время невозможно по умолчанию иметь несколько строк по оси x. Причина в том, что Android Canvas
не может просто построить строку, например. как это "Line 1\nLine2"
как две строки.
Ответ 4
Нет необходимости смещать координату x. А для многострочного сценария код должен быть
@Override
protected void drawLabel(Canvas c, String formattedLabel, float x, float y, MPPointF anchor, float angleDegrees) {
String lines[] = formattedLabel.split("\n");
for (int i = 0; i < lines.length; i++) {
float vOffset = i * mAxisLabelPaint.getTextSize();
Utils.drawXAxisValue(c, lines[i], x, y + vOffset, mAxisLabelPaint, anchor, angleDegrees);
}
}
Ответ 5
Используйте ответ @Guillaume Jounel и затем добавьте:
XAxis xAxis = lineChart.getXAxis();
xAxis.setLabelRotationAngle(-30f);
Ответ 6
Улучшенная версия ответа @Guillaume Jounel для поддержки нескольких новых строк, а также строк без новой строки.
@Override
protected void drawLabel(Canvas c, String formattedLabel, float x, float y,
MPPointF anchor, float angleDegrees) {
String line[] = formattedLabel.split("\n");
Utils.drawXAxisValue(c, line[0], x, y, mAxisLabelPaint, anchor, angleDegrees);
for (int i = 1; i < line.length; i++) { // we've already processed 1st line
Utils.drawXAxisValue(c, line[i], x, y + mAxisLabelPaint.getTextSize() * i,
mAxisLabelPaint, anchor, angleDegrees);
}
}