Похоже, нет способа сделать это простым. В конце концов я нашел неуклюжее, но рабочее решение, которое хорошо сработало в моем случае.
Сначала создайте подкласс 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
, которые используются для рисования теней. К сожалению, мне пришлось просто удалить рендеринг теней (в первую очередь потому, что они мне не нужны), поэтому для кого-то это может быть неполным решением.