Android中如何将Google Maps标记颜色改为灰色?
获取Google Maps Marker灰色图标的解决方案
你提到的点特别准确——Google Maps Android SDK里的BitmapDescriptorFactory.defaultMarker(float hue)确实只支持设置色相(Hue),而灰色属于无彩色(没有明确的色相,只有明度/色调Tone),所以直接用HUE值是没法生成灰色标记的。下面给你两个实用的解决办法:
方法一:自定义灰色Bitmap作为Marker图标
这是最稳妥、兼容性最好的方式,直接创建一个灰色的Bitmap来替代默认Marker:
// 创建一个100x100的灰色Bitmap(尺寸可按需调整) Bitmap grayBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(grayBitmap); // 填充灰色,也可以用具体色值比如Color.parseColor("#777777")调整深浅 canvas.drawColor(Color.GRAY); // 转换成Marker可用的BitmapDescriptor BitmapDescriptor grayMarkerIcon = BitmapDescriptorFactory.fromBitmap(grayBitmap); // 应用到MarkerOptions MarkerOptions markerOptions = new MarkerOptions() .icon(grayMarkerIcon) .position(new LatLng(yourLatitude, yourLongitude));
如果需要不同深浅的灰色,只需要替换Color.GRAY为对应的十六进制色值即可,比如#EEEEEE是浅灰,#333333是深灰。
方法二:通过调整饱和度生成灰色(需注意SDK兼容性)
如果你更倾向于使用默认Marker的样式,其实可以利用“无彩色饱和度为0”的特性,使用fromHueAndSaturation方法(这个方法在较新的SDK版本中支持,建议先确认你的项目SDK版本):
// 色相任意(饱和度为0时,色相不影响最终颜色),饱和度设为0即可得到无彩色(灰色系) BitmapDescriptor grayMarkerIcon = BitmapDescriptorFactory.fromHueAndSaturation(0, 0); MarkerOptions markerOptions = new MarkerOptions().icon(grayMarkerIcon);
不过这个方法生成的灰色可能和自定义Bitmap的质感略有差异,建议实际测试后再决定是否使用。
额外提醒
你之前提到的0-360的HUE值对应的都是有彩色(带有明确色彩倾向的颜色),而灰色、白色、黑色这类无彩色没有对应的HUE值,所以无法通过defaultMarker(float hue)直接生成,必须借助上面两种方法。
内容的提问来源于stack exchange,提问作者d27saurabh
相关产品推荐
相关产品推荐

