16
16
17
17
package com.google.maps.android.utils.demo
18
18
19
+ import android.os.Build
20
+ import android.util.DisplayMetrics
19
21
import android.view.View
22
+ import android.view.WindowManager
20
23
import android.widget.AdapterView
21
24
import android.widget.ArrayAdapter
22
25
import android.widget.Spinner
23
26
import com.google.android.gms.maps.CameraUpdateFactory
24
- import com.google.android.gms.maps.MapView
25
27
import com.google.android.gms.maps.model.LatLng
26
28
import com.google.maps.android.clustering.ClusterManager
27
- import com.google.maps.android.clustering.algo.AbstractAlgorithm
28
29
import com.google.maps.android.clustering.algo.CentroidNonHierarchicalDistanceBasedAlgorithm
29
30
import com.google.maps.android.clustering.algo.ContinuousZoomEuclideanCentroidAlgorithm
30
31
import com.google.maps.android.clustering.algo.GridBasedAlgorithm
@@ -40,7 +41,6 @@ import kotlin.random.Random
40
41
class ClusterAlgorithmsDemoActivity : BaseDemoActivity () {
41
42
42
43
private var clusterManager: ClusterManager <MyItem >? = null
43
- private lateinit var mapView: MapView
44
44
45
45
override fun getLayoutId (): Int {
46
46
return R .layout.activity_cluster_algorithms_demo
@@ -85,6 +85,28 @@ class ClusterAlgorithmsDemoActivity : BaseDemoActivity() {
85
85
* Sets up the ClusterManager with the chosen algorithm and populates it with items.
86
86
*/
87
87
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
+
88
110
// 1. Clear the map and previous cluster manager
89
111
map.clear()
90
112
@@ -96,9 +118,11 @@ class ClusterAlgorithmsDemoActivity : BaseDemoActivity() {
96
118
1 -> GridBasedAlgorithm ()
97
119
2 -> NonHierarchicalDistanceBasedAlgorithm ()
98
120
3 -> CentroidNonHierarchicalDistanceBasedAlgorithm ()
99
- 4 -> NonHierarchicalViewBasedAlgorithm (mapView.width, mapView.height )
121
+ 4 -> NonHierarchicalViewBasedAlgorithm (widthDp, heightDp )
100
122
5 -> ContinuousZoomEuclideanCentroidAlgorithm ()
101
- else -> error(" Unsupported algorithm position: $algorithmPosition " )
123
+ else -> {
124
+ GridBasedAlgorithm ()
125
+ }
102
126
}
103
127
104
128
// 4. Point the map's listeners to the ClusterManager
0 commit comments