You need to enable JavaScript to run this app. Kotlin使用MPAndroidChart如何为BarChart堆叠分段设置自定义颜色
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin使用MPAndroidChart如何为BarChart堆叠分段设置自定义颜色

堆叠BarChart多色分段实现修正

当前代码的核心问题

  • 着色逻辑错配:将同一个BarEntry拆分给两个独立BarDataSet设置颜色,本质是绘制了两层完全重叠的柱子,不仅无法精准匹配每个堆叠分段的颜色,还会出现渲染遮挡、颜色覆盖的问题
  • 堆叠数据结构错误:构建BarEntry时的floatArray没有做同维度数值聚合,把单条统计值重复塞入数组,会导致堆叠分段数量和实际数值数量不匹配

正确实现方式

MPAndroidChart的堆叠柱状图着色,不需要拆分多个数据集,只需要和BarEntry内的分段数组顺序一一匹配,给单个BarDataSet传入颜色列表即可实现多色分段。
具体调整步骤:

  1. 聚合同类型的堆叠数值,构建和分段顺序对齐的BarEntry
  2. 仅创建1个BarDataSet承载所有堆叠数据
  3. 为数据集传入和分段顺序完全对应的颜色列表

调整后的参考代码

// 聚合同维度数值:将所有答对(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 09:45:05