MPAndroidChart:更改条形图的形状

时间:2018-11-19 06:04:00

标签: android kotlin

我已经阅读了类似于我的问题的答案。 但是,我不明白,我认为那太复杂了。也许你们中的一些人有技巧使其变得简单。我正在使用 'com.github.PhilJay:MPAndroidChart:v2.2.4' 库,顺便说一句。我想像这样的图片制作条形图。

the bar chart

矩形的角的半径约为4dp。 我还没有找到绘制它的方法。

2 个答案:

答案 0 :(得分:0)

看起来没有办法使其简单。最终,我想到了一个笨拙但可行的解决方案,在我的情况下效果很好。 首先,将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被使用用于绘制阴影。不幸的是,我不得不删除阴影渲染(首先是因为我不需要阴影渲染),所以对于某些人来说,这可能是一个不完整的解决方案。

答案 1 :(得分:0)

创建了完整的圆角条形图 MPAndroidChart,请查看以下链接:-

Rounded edge of barchart