Android开发中如何将Google Map当前位置蓝色图标替换为自定义图标
你现在调用map.isMyLocationEnabled = true启用的是地图SDK自带的默认定位图标,自定义图标可以按你使用的地图SDK类型对应操作:
谷歌地图 Android SDK 实现方案
谷歌地图自带的定位层不支持直接修改图标,需要自己实现自定义定位标记:
- 先关闭自带定位层:将原有代码里的
map.isMyLocationEnabled = true改为false - 接入FusedLocationProviderClient获取实时位置更新,不需要自己处理定位逻辑
- 自定义位置Marker,每次拿到新位置后更新Marker坐标即可,参考代码:
// 存储当前位置的Marker实例,避免重复添加 private var currentLocationMarker: Marker? = null // 生成自定义Marker配置 private fun buildCustomMarker(latLng: LatLng): MarkerOptions { return MarkerOptions() .position(latLng) // 替换成你自己的图标资源 .icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_location_icon)) // 锚点设为0.5,0.5保证图标中心对准坐标点 .anchor(0.5f, 0.5f) } // 位置更新时调用这个方法刷新地图上的定位图标 private fun refreshLocationMarker(latLng: LatLng) { currentLocationMarker?.remove() currentLocationMarker = map.addMarker(buildCustomMarker(latLng)) // 需要自动居中到当前位置可以加上下面这行,缩放级别可自行调整 // map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 16f)) }
高德/百度地图 Android SDK 实现方案
国内地图SDK自带的定位层支持直接修改样式,不需要自己实现位置监听:
以高德地图为例,只需在开启定位层前设置自定义样式即可:
val customLocationStyle = MyLocationStyle() // 设置自定义定位图标 customLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.custom_location_icon)) // 不需要默认精度圈的话可以设为透明 customLocationStyle.strokeColor(Color.TRANSPARENT) customLocationStyle.radiusFillColor(Color.TRANSPARENT) // 把自定义样式设置给地图 map.myLocationStyle = customLocationStyle // 再开启定位就会显示自定义图标 map.isMyLocationEnabled = true
内容的提问来源于stack exchange,提问作者joelkanyi
相关产品推荐
相关产品推荐

