android-maps-utils 中的 DefaultClusterRenderer 在 v1.2.1 中损坏了吗?
Is DefaultClusterRenderer in android-maps-utils broken in v1.2.1?
当试图覆盖 DefaultClusterRenderer 中的任何函数时,它不会在 v1.2.1 中编译。在 v1.1.0
中似乎一切正常
在这里我想为集群图标设置颜色,并覆盖 DefaultClusterRenderer
onBeforeClusterItemRendered
以根据值设置颜色。
以下代码在 v1.2.1 中失败,在 v1.1.0 中完全正常
package no.rogo.emptyfuel.utilities.cluster
import android.content.Context
import android.graphics.Color
import android.util.Log
import com.bumptech.glide.load.resource.bitmap.BitmapDrawableEncoder
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import com.google.android.gms.maps.model.Marker
import com.google.android.gms.maps.model.MarkerOptions
import com.google.maps.android.clustering.Cluster
import com.google.maps.android.clustering.ClusterManager
import com.google.maps.android.clustering.view.DefaultClusterRenderer
import com.google.maps.android.ui.IconGenerator
import no.rogo.emptyfuel.R
import no.rogo.emptyfuel.utilities.StatusLevel
/**
* Created by Roar on 05.04.2020.
* Copyright RoGo Software / Gronmo IT
*/
class CustomClusterRenderer(
context: Context,
map: GoogleMap,
clusterManager: ClusterManager<ClusterStation?>?
) : DefaultClusterRenderer<ClusterStation?>(context,map,clusterManager)
{
private val TAG by lazy { this::class.java.simpleName }
private val clusterIconGenerator = IconGenerator(context.applicationContext)
override fun onBeforeClusterItemRendered(
item: ClusterStation?,
markerOptions: MarkerOptions?
) {
var markerHue = when(item?.statusLevel)
{
StatusLevel.SINCE_NEW -> BitmapDescriptorFactory.HUE_GREEN
StatusLevel.SINCE_FAIR -> BitmapDescriptorFactory.HUE_YELLOW
StatusLevel.SINCE_OLD -> BitmapDescriptorFactory.HUE_RED
StatusLevel.SINCE_OLDER -> BitmapDescriptorFactory.HUE_BLUE
StatusLevel.NOT_SET -> BitmapDescriptorFactory.HUE_CYAN
StatusLevel.NOT_AVAILABLE -> BitmapDescriptorFactory.HUE_AZURE
StatusLevel.HIDDEN -> BitmapDescriptorFactory.HUE_ROSE
StatusLevel.UNCERTAIN -> BitmapDescriptorFactory.HUE_ORANGE
StatusLevel.UNKNOWN -> BitmapDescriptorFactory.HUE_MAGENTA
else -> BitmapDescriptorFactory.HUE_VIOLET
}
//Color.colorToHSV(markerColor,markerHue)
//Log.i(TAG,"map3: markerHue = ${markerHue[0]}")
val markerDescriptor = BitmapDescriptorFactory.defaultMarker(markerHue)
markerOptions?.icon(markerDescriptor)
super.onBeforeClusterItemRendered(item, markerOptions)
}
override fun onClusterItemRendered(clusterItem: ClusterStation?, marker: Marker?) {
super.onClusterItemRendered(clusterItem, marker)
}
override fun onBeforeClusterRendered(
cluster: Cluster<ClusterStation?>?,
markerOptions: MarkerOptions?
) {
super.onBeforeClusterRendered(cluster, markerOptions)
}
}
有谁知道发生了什么变化以及如何解决?
RG
我找到了问题的解决方案,在这个 pull (https://github.com/googlemaps/android-maps-utils/pull/687) 中,他们将参数更改为 nullsafe,因此更改时:
override fun onBeforeClusterItemRendered(
item: ClusterStation?,
markerOptions: MarkerOptions?
)
到
override fun onBeforeClusterItemRendered(
item: ClusterStation,
markerOptions: MarkerOptions
)
已修复。这实际上是一个 kotlin 问题...
RG
当试图覆盖 DefaultClusterRenderer 中的任何函数时,它不会在 v1.2.1 中编译。在 v1.1.0
中似乎一切正常在这里我想为集群图标设置颜色,并覆盖 DefaultClusterRenderer
onBeforeClusterItemRendered
以根据值设置颜色。
以下代码在 v1.2.1 中失败,在 v1.1.0 中完全正常
package no.rogo.emptyfuel.utilities.cluster
import android.content.Context
import android.graphics.Color
import android.util.Log
import com.bumptech.glide.load.resource.bitmap.BitmapDrawableEncoder
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.model.BitmapDescriptorFactory
import com.google.android.gms.maps.model.Marker
import com.google.android.gms.maps.model.MarkerOptions
import com.google.maps.android.clustering.Cluster
import com.google.maps.android.clustering.ClusterManager
import com.google.maps.android.clustering.view.DefaultClusterRenderer
import com.google.maps.android.ui.IconGenerator
import no.rogo.emptyfuel.R
import no.rogo.emptyfuel.utilities.StatusLevel
/**
* Created by Roar on 05.04.2020.
* Copyright RoGo Software / Gronmo IT
*/
class CustomClusterRenderer(
context: Context,
map: GoogleMap,
clusterManager: ClusterManager<ClusterStation?>?
) : DefaultClusterRenderer<ClusterStation?>(context,map,clusterManager)
{
private val TAG by lazy { this::class.java.simpleName }
private val clusterIconGenerator = IconGenerator(context.applicationContext)
override fun onBeforeClusterItemRendered(
item: ClusterStation?,
markerOptions: MarkerOptions?
) {
var markerHue = when(item?.statusLevel)
{
StatusLevel.SINCE_NEW -> BitmapDescriptorFactory.HUE_GREEN
StatusLevel.SINCE_FAIR -> BitmapDescriptorFactory.HUE_YELLOW
StatusLevel.SINCE_OLD -> BitmapDescriptorFactory.HUE_RED
StatusLevel.SINCE_OLDER -> BitmapDescriptorFactory.HUE_BLUE
StatusLevel.NOT_SET -> BitmapDescriptorFactory.HUE_CYAN
StatusLevel.NOT_AVAILABLE -> BitmapDescriptorFactory.HUE_AZURE
StatusLevel.HIDDEN -> BitmapDescriptorFactory.HUE_ROSE
StatusLevel.UNCERTAIN -> BitmapDescriptorFactory.HUE_ORANGE
StatusLevel.UNKNOWN -> BitmapDescriptorFactory.HUE_MAGENTA
else -> BitmapDescriptorFactory.HUE_VIOLET
}
//Color.colorToHSV(markerColor,markerHue)
//Log.i(TAG,"map3: markerHue = ${markerHue[0]}")
val markerDescriptor = BitmapDescriptorFactory.defaultMarker(markerHue)
markerOptions?.icon(markerDescriptor)
super.onBeforeClusterItemRendered(item, markerOptions)
}
override fun onClusterItemRendered(clusterItem: ClusterStation?, marker: Marker?) {
super.onClusterItemRendered(clusterItem, marker)
}
override fun onBeforeClusterRendered(
cluster: Cluster<ClusterStation?>?,
markerOptions: MarkerOptions?
) {
super.onBeforeClusterRendered(cluster, markerOptions)
}
}
有谁知道发生了什么变化以及如何解决?
RG
我找到了问题的解决方案,在这个 pull (https://github.com/googlemaps/android-maps-utils/pull/687) 中,他们将参数更改为 nullsafe,因此更改时:
override fun onBeforeClusterItemRendered(
item: ClusterStation?,
markerOptions: MarkerOptions?
)
到
override fun onBeforeClusterItemRendered(
item: ClusterStation,
markerOptions: MarkerOptions
)
已修复。这实际上是一个 kotlin 问题...
RG