You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android加权热力图开发疑问:颜色数组与起始点数组的关联

关于Android热力图渐变中颜色数组与起始点数组的解析

我刚好用过Google Maps的热力图Gradient类,来给你掰扯清楚这个问题~

先搞懂“起始点数组”的定义

官方文档说的“各颜色对应的最大强度百分比起始点”,其实可以这么理解:
这个数组里的每个值是0.0到1.0之间的浮点数,代表对应颜色在「整个热力图强度范围(0%最弱 → 100%最强)」里的起始位置比例。简单说,就是把强度区间切成若干段,每个起始点标记了某段颜色开始介入的位置。

颜色数组和起始点数组的关联规则

这俩数组是一一对应、长度必须完全一致的:

  • 数组的相同索引位置,就是一组配对关系:colors[i] 对应 stops[i]
  • stops[i] 定义了 colors[i] 开始生效的强度阈值(相对于最大强度的百分比)
  • 相邻两组配对之间,颜色会平滑过渡,而不是硬切换

结合你的示例代码来实战

你给出的颜色数组注释是 GREEN(0-50)、YELLOW(51-100),还有一个橙色,那我补全对应的起始点数组,给你完整的代码示例:

// 颜色数组:对应不同强度区间的过渡颜色
int[] colors = {
    Color.GREEN,               // 对应强度0% → 50%的起始点
    Color.YELLOW,              // 对应强度50% → 75%的起始点
    Color.rgb(255, 165, 0)     // 对应强度75% → 100%的起始点
};

// 起始点数组:每个值是0.0-1.0的浮点数,代表颜色开始的强度百分比
float[] stops = {
    0.0f,    // GREEN从0%最大强度开始生效
    0.5f,    // YELLOW从50%最大强度开始生效
    0.75f    // 橙色从75%最大强度开始生效
};

// 创建渐变对象
Gradient heatmapGradient = new Gradient(colors, stops);

// 把渐变设置给热力图层(以Google Maps的HeatmapLayer为例)
heatmapLayer.setGradient(heatmapGradient);

再给你拆解一下实际效果

假设你的热力图最大强度是100(比如某个区域最多有100个点位):

  • 当区域强度在0-50(0%→50%最大强度):颜色从绿色平滑过渡到黄色
  • 当区域强度在50-75(50%→75%最大强度):颜色从黄色平滑过渡到橙色
  • 当区域强度在75-100(75%→100%最大强度):颜色保持橙色(因为已经到最后一个颜色,没有下一个过渡目标了)

几个关键注意事项

  • stops数组必须严格递增(从0.0到1.0),不能有重复或递减的值,否则会报错
  • 如果省略stops数组只传colors,系统会自动给你均匀分配起始点(比如3个颜色就对应0.0、0.5、1.0)
  • 起始点不需要必须覆盖0.0或1.0,但如果没包含0.0,0%→第一个起始点的区间会用第一个颜色;没包含1.0,最后一个起始点→100%的区间会用最后一个颜色

内容的提问来源于stack exchange,提问作者Ahamed Yasir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:38:07