Dzpszied

MPAndroidChart 设定特定bar的颜色

在运用 MPAndroidChart-BarChart 时,有时会需要设定特定 Bar 的颜色。

根据x值设定颜色

给数据集设置颜色的方法可以用单一颜色setColor(int color)或颜色数组setColors(int [] colors)。使用setColors时,数据项的颜色将按照传入颜色数组的顺序依次重复渲染。所以当数据数组的长度等于颜色数组时,其颜色序列恰好等于数据序列。

我们有一个数据组yVals和一个颜色数组colorVals,在添加数据项的同时在颜色数组存储相应的颜色,那么就实现了控制每一项的颜色。

这里给出的是 Kotlin 实现高亮第四列的效果,Java 原理相同。

val yVals = ArrayList<BarEntry>()
val colorVals = ArrayList<Int>()
    
for (i in 0..29) {
    yVals.add(BarEntry(i.toFloat(), value))
    if (i == 3) {
        colorVals.add(Color.parseColor("#666666"))
    }
    else {
        colorVals.add(Color.parseColor("#F9BF45"))
    }
}

val barDataSet = BarDataSet(yVals, "")
barDataSet.colors = colorVals

val dataSets = ArrayList<IBarDataSet>()
dataSets.add(barDataSet)

val barData = BarData(dataSets)

mChart.data = barData
mChart.setFitBars(true)

mChart.invalidate()

效果如图。

根据y值设定颜色

在上面的代码中,我们实现了根据x值来确定颜色,其实只是对i值做了判断而已。同理,在这个循环中value的值我们也是可以拿到的,所以只要对value值进行判断,就可以实现根据y值确定颜色。

参考

  1. Setting Colors · PhilJay/MPAndroidChart Wiki
  2. Is it possible to set color of bar based on values of X axis for a horizontal bar graph? #2236
  3. How to set one particular bar's color #1662

评论