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
相关产品推荐
相关产品推荐

