Повернуть текст значения вертикально вне строки в BarChart MPAndroidChart - PullRequest
3 голосов
/ 24 мая 2019

Повернуть текст значения по вертикали вне строки в BarChart MPAndroidChart

Я могу повернуть текст, но он поступает внутри строки, чего я достиг, используя приведенный ниже код:

chart.setRenderer(CustomBarChartRenderer(context, this, this.getAnimator(), this.getViewPortHandler()))

public class CustomBarChartRenderer extends BarChartRenderer {
      public CustomBarChartRenderer(BarDataProvider chart, 
                                    ChartAnimator animator, ViewPortHandler viewPortHandler) {
           super(chart, animator, viewPortHandler);
      }

      @Override
      public void drawValue(Canvas canvas, IValueFormatter formatter, 
                            float value, Entry entry, int dataSetIndex, float x, float y, int color) {
           mValuePaint.setColor(color);

           canvas.save();
           canvas.rotate(-90);

           canvas.drawText(formatter.getFormattedValue(value, entry, 
                                                       dataSetIndex, mViewPortHandler), x, y, mValuePaint);
           canvas.restore();
      }
}

Текст вращается, но входит в полосу, как показано на изображении ниже:

Как правильно выровнять текстовое значениевыше бара ??

1 Ответ

1 голос
/ 27 мая 2019

Мне удалось исправить это, переместив метку вверх.

Стоит отметить, что размеры x и y изменяются внутри, так как мы поворачиваем метку, поэтому для перемещения метки вверх вам нужно увеличить значение x, а не yзначение.

Также обратите внимание, чтобы сделать его динамичным и работать со всеми длинами текста, я рассчитываю размер пикселя для отображаемого текста и перемещаю метку вверх только на этот размер пикселя.Смотрите код ниже (в котлине):

override fun drawValue(c: Canvas, formatter: IValueFormatter, value: Float, entry: Entry, dataSetIndex: Int, x: Float, y: Float, color: Int) {
    mValuePaint.color = Color.WHITE
    val text = formatter.getFormattedValue(value, entry, dataSetIndex, mViewPortHandler)

    c.save()
    val width = mValuePaint.measureText(text)
    c.rotate(-90f, x, y)

    c.drawText(text, x + (width / 2), y, mValuePaint)
    c.restore()
}
...