自从项目中大量使用图表库MPAndroidChart后才发现,原来它的展现形式多种多样。对于前端来说组件直接拉过去就直接可用,各种各样的展现形式看的我一个Android开发倒吸一口凉气。今天就来讲讲初入多条柱状统计图碰过的壁。
因为之前也使用过MPAndroidChart,但用的基本都是折线和多折线统计LineChart,而柱状统计图需要用到BarChart。X、Y轴的基础设置大差不差,最关键的就是数据设置:
BarChart对应的数据源是BarData,而BarData的构造又是由多个BarDataSet入参所得。每个BarDataSet其实就相当于单独的一条柱状数据源,而BarDataSet的构造又是BarEntry集合入参所得。
//BarEntry集合
val values1 = ArrayList<BarEntry>()
val values2 = ArrayList<BarEntry>()
for (i in list.indices) {
values1.add(BarEntry(i.toFloat(),value1))
values2.add(BarEntry(i.toFloat(),value2))
}
//BarDataSet创建
val set1 = BarDataSet(values1, "1")
val set2 = BarDataSet(values2, "2")
//设置数据源
barChart.apply {
setData(BarData(set1, set2))
}
到这里基本上完成了数据接入,运行效果如下:
什么!又矮又胖,竟然还叠在一起了???,仔细看了看demo发现有个barWidth属性,这应该就是设置柱状宽:
val data = BarData(set1, set2)
data.barWidth = 0.2f
果不其然,宽度解决了,但为啥会叠在一起。确实有时候会因为一些很小的细节没注意导致得到的效果相差甚远。
最终,在很不起眼的地方看到了groupBars() 方法,需要传递三个参数:
非常好理解:
fromX:从X轴什么位置开始
groupSpace:多条柱状条之间的间隔
barSpace:每个整体的柱状条之间的间隔
public void groupBars(float fromX, float groupSpace, float barSpace) {
......
getBarData().groupBars(fromX, groupSpace, barSpace);
notifyDataSetChanged();
......
}
barChart.apply {
groupBars(-0.45f, 0.5f, 0.04f)
}
设置完成之后再次运行:
这次是我想要的效果!
以上便是多条柱状图的碰壁经历,希望对大家有所帮助。另外如果需要在柱状图上加上圆角又该怎么办呢?可以参考# Android:图表库(MPAndroidChart)简单实现带圆角的柱状图