如果您使用Clusters
,则行为会略有不同。
参考https://medium.com/@yilmazvolkan/custom-map-marker-8b136212d766和这里,我写了这样的内容。
styles.xml:
<!
<style name="MarkerText">
<item name="android:textSize">12sp</item>
<item name="android:textColor">#f0f0f0</item>
</style>
marker_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid android:color="#3232a0" />
<corners android:radius="18dp" />
</shape>
片段:
private var clusterManager: ClusterManager<SomeClusterItem>? = null
private var clusterRenderer: MarkerClusterRenderer<SomeClusterItem>? = null
private var unselectedBitmap: BitmapDescriptor? = null
private var iconGenerator: IconGenerator? = null
private var selectedItem: SomeClusterItem? = null
override fun onMapReady(googleMap: GoogleMap) {
this.googleMap = googleMap
...
unselectedBitmap =
BitmapUtils.bitmapDescriptorFromVector(context!!, R.drawable.unselected_item)
iconGenerator = IconGenerator(context!!)
iconGenerator!!.setTextAppearance(R.style.MarkerText)
val markerBackground = ContextCompat.getDrawable(context!!, R.drawable.marker_bg)
iconGenerator!!.setBackground(markerBackground)
clusterManager = ClusterManager(context!!, googleMap)
clusterRenderer = MarkerClusterRenderer(context!!, googleMap, clusterManager!!,
unselectedBitmap!!)
clusterManager!!.renderer = clusterRenderer
...
val boundsBuilder = LatLngBounds.Builder()
...
clusterManager!!.cluster()
clusterManager!!.setOnClusterItemClickListener { item ->
if (selectedItem != null) {
deselectMarker(selectedItem)
}
selectedItem = item
selectMarker(selectedItem!!, iconGenerator)
false
}
clusterManager!!.setOnClusterClickListener {
deselectMarker(selectedItem)
true
}
private fun selectMarker(item: SomeClusterItem,
iconGenerator: IconGenerator) {
val icon = iconGenerator.makeIcon(item.title)
val bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(icon)
clusterRenderer?.getMarker(item)?.setIcon(bitmapDescriptor)
}
private fun deselectMarker(item: SomeClusterItem?) =
clusterRenderer?.getMarker(item)?.setIcon(unselectedBitmap)
然后你会看到这些图片(所有项目都未被选中,一个项目被选中)。
![enter image description here](https://istack.dev59.com/f8pQU.webp)
请注意InfoWindow已显示。如需自定义信息窗口,请参见
https://dev59.com/WmYr5IYBdhLWcg3wKHIp#59952706。
要删除信息窗口,只需在适当的方法中返回
true
(请参见
Hide markers info window in android google maps API v2)。
clusterManager!!.setOnClusterItemClickListener { item ->
...
true
}
![enter image description here](https://istack.dev59.com/QagX2.webp)