@@ -32,6 +32,7 @@ import androidx.compose.ui.viewinterop.AndroidView
32
32
import com.arcgismaps.geometry.SpatialReference
33
33
import com.arcgismaps.mapping.ArcGISScene
34
34
import com.arcgismaps.mapping.TimeExtent
35
+ import com.arcgismaps.mapping.view.Camera
35
36
import com.arcgismaps.mapping.view.CameraController
36
37
import com.arcgismaps.mapping.view.DoubleTapEvent
37
38
import com.arcgismaps.mapping.view.DownEvent
@@ -76,6 +77,7 @@ import java.time.Instant
76
77
* @param onSpatialReferenceChanged lambda invoked when the spatial reference of the composable SceneView has changed
77
78
* @param onLayerViewStateChanged lambda invoked when the composable SceneView's layer view state is changed
78
79
* @param onInteractingChanged lambda invoked when the user starts and ends interacting with the composable SceneView
80
+ * @param onCurrentViewpointCameraChanged lambda invoked when the viewpoint camera of the composable SceneView has changed
79
81
* @param onRotate lambda invoked when a user performs a rotation gesture on the composable SceneView
80
82
* @param onScale lambda invoked when a user performs a pinch gesture on the composable SceneView
81
83
* @param onUp lambda invoked when the user removes all their pointers from the composable SceneView
@@ -109,6 +111,7 @@ public fun SceneView(
109
111
onSpatialReferenceChanged : ((spatialReference: SpatialReference ? ) -> Unit )? = null,
110
112
onLayerViewStateChanged : ((GeoView .GeoViewLayerViewStateChanged ) -> Unit )? = null,
111
113
onInteractingChanged : ((isInteracting: Boolean ) -> Unit )? = null,
114
+ onCurrentViewpointCameraChanged : ((camera: Camera ) -> Unit )? = null,
112
115
onRotate : ((RotationChangeEvent ) -> Unit )? = null,
113
116
onScale : ((ScaleChangeEvent ) -> Unit )? = null,
114
117
onUp : ((UpEvent ) -> Unit )? = null,
@@ -167,6 +170,7 @@ public fun SceneView(
167
170
onSpatialReferenceChanged,
168
171
onLayerViewStateChanged,
169
172
onInteractingChanged,
173
+ onCurrentViewpointCameraChanged,
170
174
onRotate,
171
175
onScale,
172
176
onUp,
@@ -207,6 +211,7 @@ private fun SceneViewEventHandler(
207
211
onSpatialReferenceChanged : ((spatialReference: SpatialReference ? ) -> Unit )? ,
208
212
onLayerViewStateChanged : ((GeoView .GeoViewLayerViewStateChanged ) -> Unit )? ,
209
213
onInteractingChanged : ((isInteracting: Boolean ) -> Unit )? ,
214
+ onCurrentViewpointCameraChanged : ((camera: Camera ) -> Unit )? ,
210
215
onRotate : ((RotationChangeEvent ) -> Unit )? ,
211
216
onScale : ((ScaleChangeEvent ) -> Unit )? ,
212
217
onUp : ((UpEvent ) -> Unit )? ,
@@ -223,6 +228,7 @@ private fun SceneViewEventHandler(
223
228
val currentOnSpatialReferenceChanged by rememberUpdatedState(onSpatialReferenceChanged)
224
229
val currentOnLayerViewStateChanged by rememberUpdatedState(onLayerViewStateChanged)
225
230
val currentOnInteractingChanged by rememberUpdatedState(onInteractingChanged)
231
+ val currentOnViewpointCameraChanged by rememberUpdatedState(onCurrentViewpointCameraChanged)
226
232
val currentOnRotate by rememberUpdatedState(onRotate)
227
233
val currentOnScale by rememberUpdatedState(onScale)
228
234
val currentOnUp by rememberUpdatedState(onUp)
@@ -255,6 +261,11 @@ private fun SceneViewEventHandler(
255
261
currentOnLayerViewStateChanged?.invoke(currentLayerViewState)
256
262
}
257
263
}
264
+ launch {
265
+ sceneView.viewpointChanged.collect {
266
+ currentOnViewpointCameraChanged?.invoke(sceneView.getCurrentViewpointCamera())
267
+ }
268
+ }
258
269
launch(Dispatchers .Main .immediate) {
259
270
sceneView.isInteracting.collect { isInteracting ->
260
271
currentOnInteractingChanged?.invoke(isInteracting)
0 commit comments