Kotlin使用MPAndroidChart如何为BarChart堆叠分段设置自定义颜色
堆叠BarChart多色分段实现修正
当前代码的核心问题
- 着色逻辑错配:将同一个BarEntry拆分给两个独立BarDataSet设置颜色,本质是绘制了两层完全重叠的柱子,不仅无法精准匹配每个堆叠分段的颜色,还会出现渲染遮挡、颜色覆盖的问题
- 堆叠数据结构错误:构建BarEntry时的floatArray没有做同维度数值聚合,把单条统计值重复塞入数组,会导致堆叠分段数量和实际数值数量不匹配
正确实现方式
MPAndroidChart的堆叠柱状图着色,不需要拆分多个数据集,只需要和BarEntry内的分段数组顺序一一匹配,给单个BarDataSet传入颜色列表即可实现多色分段。
具体调整步骤:
- 聚合同类型的堆叠数值,构建和分段顺序对齐的BarEntry
- 仅创建1个BarDataSet承载所有堆叠数据
- 为数据集传入和分段顺序完全对应的颜色列表
调整后的参考代码
// 聚合同维度数值:将所有答对(richtig)的数值求和作为第一段高度,所有答错(falsch)的数值求和作为第二段高度 val sumRichtig = richtig val sumFalsch = falsch // 构建堆叠条目,floatArray顺序与后续颜色顺序严格对应 val entries = arrayListOf(BarEntry(1f, floatArrayOf(sumRichtig, sumFalsch))) // 仅创建单个BarDataSet,不需要拆分两个数据集 val stackBarSet = BarDataSet(entries, "答题统计") // 沿用你原来的自定义色值:-16711936为纯绿色,-65536为纯红色 stackBarSet.colors = arrayListOf( -16711936, // 答对分段:绿色 -65536 // 答错分段:红色 ) // 如果需要分段对应的图例说明,通过stackLabels设置即可,无需拆分数据集 stackBarSet.stackLabels = arrayOf("答对", "答错")
注意事项
- 关键点:颜色列表的顺序必须和BarEntry中floatArray的分段顺序严格对齐,顺序错配会导致颜色和实际分段对应不上
- 不要单独给BarDataSet设置单值
color属性,该属性会将整个数据集统一为单种颜色,覆盖分段着色的效果 - 不要重复将同一个entry实例传入多个BarDataSet,会导致柱状图渲染位置错位、透明度叠加异常
- 注意核对自定义色值的对应关系:你原来代码里的
-65536为纯红色,-16711936为纯绿色,避免给对错分段配错颜色
内容的提问来源于stack exchange,提问作者Slim
相关产品推荐
相关产品推荐

