首页 > 解决方案 > 地图移动时自定义集群图标更改

问题描述

我以这种方式更改了默认群集图标

    internal class MarkerClusterRenderer(private val context: Context?, map: GoogleMap?, clusterManager: ClusterManager<PointOfInterest>?) :
        DefaultClusterRenderer<PointOfInterest>(context, map, clusterManager) {

        private val mClusterIconGenerator = IconGenerator(context)

        override fun onBeforeClusterItemRendered(item: PointOfInterest, markerOptions: MarkerOptions) {
            markerOptions.icon(BitmapDescriptorFactory.fromResource(getMarkerResource(item)))
        }
        override fun onBeforeClusterRendered(cluster: Cluster<PointOfInterest>, markerOptions: MarkerOptions) {
            markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_cluster))

        }

但是当我移动地图时,我设置的图标更改为默认图标。

我该如何解决?

更新

我设法通过覆盖一个方法来解决这个问题。这是最后一堂课

 internal class MarkerClusterRenderer(private val context: Context?, map: GoogleMap?, clusterManager: ClusterManager<PointOfInterest>?) :
        DefaultClusterRenderer<PointOfInterest>(context, map, clusterManager) {

        private val mClusterIconGenerator = IconGenerator(context)
        val clusterIcon = ResourcesCompat.getDrawable(context!!.resources, R.drawable.ic_cluster,null)!!

        override fun onBeforeClusterItemRendered(item: PointOfInterest, markerOptions: MarkerOptions) {
            markerOptions.icon(BitmapDescriptorFactory.fromResource(getMarkerResource(item)))
        }
        
        override fun onBeforeClusterRendered(cluster: Cluster<PointOfInterest>, markerOptions: MarkerOptions) {
            mClusterIconGenerator.setBackground(clusterIcon)

            if (cluster.size < 10) {
                mClusterIconGenerator.setContentPadding(40, 20, 0, 0)
            } else {
                mClusterIconGenerator.setContentPadding(30, 20, 0, 0)
            }

            val icon: Bitmap = mClusterIconGenerator.makeIcon(cluster.size.toString())
            markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon))
        }

        override fun getDescriptorForCluster(cluster: Cluster<PointOfInterest>): BitmapDescriptor {
            mClusterIconGenerator.setBackground(clusterIcon)

            if (cluster.size < 10) {
                mClusterIconGenerator.setContentPadding(40, 20, 0, 0)
            } else {
                mClusterIconGenerator.setContentPadding(30, 20, 0, 0)
            }

            val icon: Bitmap = mClusterIconGenerator.makeIcon(cluster.size.toString())
            return BitmapDescriptorFactory.fromBitmap(icon)
        }

标签: androidandroid-mapview

解决方案


推荐阅读