MPAndroidChart: изменить форму гистограммы - PullRequest
0 голосов
/ 19 ноября 2018

Я уже прочитал ответы на вопрос, который похож на мой.но я не понимаю, и я думаю, что это так сложно.может быть, у некоторых из вас есть хитрость, как сделать это просто.я использую библиотеку 'com.github.PhilJay:MPAndroidChart:v2.2.4', кстати.я хочу сделать гистограмму стиля, подобного этой картинке.

the bar chart

угол прямоугольника имеет радиус около 4dp.я не нашел способа нарисовать это.

1 Ответ

0 голосов
/ 28 марта 2019

Похоже, нет способа сделать это простым. В конце концов я нашел неуклюжее, но рабочее решение, которое хорошо сработало в моем случае. Сначала создайте подкласс BarChartRenderer и установите его на свой график:

class CustomBarRenderer constructor(
         chart: BarChart, 
         animator: ChartAnimator, 
         vpHandler: ViewPortHandler,
         cornerDimens: Float
) : BarChartRenderer(chart, animator, vpHandler)

//...
chart.renderer = CustomBarRenderer(chart, chart.animator, chart.viewPortHandler, cornersDimens)
//...

BarChartRenderer наследует mRenderPaint элемент, который используется для рисования линий стержня, поэтому, если вам нужно небольшое изменение (ширина границы стержня, тип заливки или что-то еще), вы можете просто переопределить mRendererPaint в своем блоке init и ты в порядке.

init {
    mRendererPaint = Paint().also {
        // all paint properties you need
    }
}

Но этого недостаточно, чтобы получить закругленные углы. Причина в том, что рендерер рисует их, используя canvas.drawRect внутри drawDataSet метода, поэтому нам нужно пойти глубже и переопределить его и изменить этот вызов на canvas.drawRoundRect:

override fun drawDataSet(c: Canvas, dataSet: IBarDataSet, index: Int) {

    //....
    c.drawRoundRect(
         buffer.buffer[j], buffer.buffer[j + 1], buffer.buffer[j + 2],
         buffer.buffer[j + 3], cornersDimen, cornersDimen, mRenderPaint
    )
    //....
}

Важно - хотя большинство членов renderer являются protected и просты в использовании или переопределении, все еще есть некоторые вещи private, которые используются для рисования теней. К сожалению, мне пришлось просто удалить рендеринг теней (в первую очередь потому, что они мне не нужны), поэтому для кого-то это может быть неполным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...