1616
1717package com.google.maps.android.utils.demo
1818
19+ import android.os.Build
20+ import android.util.DisplayMetrics
1921import android.view.View
22+ import android.view.WindowManager
2023import android.widget.AdapterView
2124import android.widget.ArrayAdapter
2225import android.widget.Spinner
2326import com.google.android.gms.maps.CameraUpdateFactory
24- import com.google.android.gms.maps.MapView
2527import com.google.android.gms.maps.model.LatLng
2628import com.google.maps.android.clustering.ClusterManager
27- import com.google.maps.android.clustering.algo.AbstractAlgorithm
2829import com.google.maps.android.clustering.algo.CentroidNonHierarchicalDistanceBasedAlgorithm
2930import com.google.maps.android.clustering.algo.ContinuousZoomEuclideanCentroidAlgorithm
3031import com.google.maps.android.clustering.algo.GridBasedAlgorithm
@@ -40,7 +41,6 @@ import kotlin.random.Random
4041class ClusterAlgorithmsDemoActivity : BaseDemoActivity () {
4142
4243 private var clusterManager: ClusterManager <MyItem >? = null
43- private lateinit var mapView: MapView
4444
4545 override fun getLayoutId (): Int {
4646 return R .layout.activity_cluster_algorithms_demo
@@ -85,6 +85,28 @@ class ClusterAlgorithmsDemoActivity : BaseDemoActivity() {
8585 * Sets up the ClusterManager with the chosen algorithm and populates it with items.
8686 */
8787 private fun setupClusterer (algorithmPosition : Int ) {
88+
89+ val windowManager = getSystemService(WINDOW_SERVICE ) as WindowManager
90+ val metrics = DisplayMetrics ()
91+ val width: Int
92+ val height: Int
93+
94+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
95+ // For devices with Android 11 (API 30) and above
96+ val windowMetrics = windowManager.currentWindowMetrics
97+ width = windowMetrics.bounds.width()
98+ height = windowMetrics.bounds.height()
99+ metrics.density = resources.displayMetrics.density
100+ } else {
101+ // For devices below Android 11
102+ windowManager.defaultDisplay.getMetrics(metrics)
103+ width = metrics.widthPixels
104+ height = metrics.heightPixels
105+ }
106+
107+ val widthDp = (width / metrics.density).toInt()
108+ val heightDp = (height / metrics.density).toInt()
109+
88110 // 1. Clear the map and previous cluster manager
89111 map.clear()
90112
@@ -96,9 +118,11 @@ class ClusterAlgorithmsDemoActivity : BaseDemoActivity() {
96118 1 -> GridBasedAlgorithm ()
97119 2 -> NonHierarchicalDistanceBasedAlgorithm ()
98120 3 -> CentroidNonHierarchicalDistanceBasedAlgorithm ()
99- 4 -> NonHierarchicalViewBasedAlgorithm (mapView.width, mapView.height )
121+ 4 -> NonHierarchicalViewBasedAlgorithm (widthDp, heightDp )
100122 5 -> ContinuousZoomEuclideanCentroidAlgorithm ()
101- else -> error(" Unsupported algorithm position: $algorithmPosition " )
123+ else -> {
124+ GridBasedAlgorithm ()
125+ }
102126 }
103127
104128 // 4. Point the map's listeners to the ClusterManager
0 commit comments