Mapbox Android 中流畅的用户位置跟踪

问题描述 投票:0回答:1

我正在开发一个带有位置按钮的 Android 地图应用程序,该按钮可以将相机动画显示到用户的位置并跟踪他们的移动。但是,当用户处于运动状态(例如驾驶)时,动画完成后地图的位置会出现明显的跳跃。发生这种情况是因为动画进行时用户的位置发生了变化。我想过动态更新待处理动画的目标值,但是,恐怕这在 Mapbox 中是不可能的。

这是我的代码片段:

var isAnimating = false
    
val initialOptions = CameraOptions.Builder()
    .center(currentUserPosition)
    .build()
    
val animationOptions = MapAnimationOptions.Builder()
    .duration(600)
    .animatorListener(animationListener) // listener updates isAnimating flag
    .build()
    
map.easeTo(initialOptions, animationOptions)

location.addOnIndicatorPositionChangedListener {
    if (!isAnimating) {
        val options = CameraOptions.Builder()
            .center(it)
            .build()

        map.setCamera(options)
        gestures.focalPoint = map.pixelForCoordinate(it)
    }
}

我正在寻求有关如何使相机平滑地跟随用户的移动而不在动画完成后出现明显跳跃的建议。任何见解或想法将不胜感激。

android kotlin mapbox mapbox-android userlocation
1个回答
0
投票

为了避免动画后跳转,您可以根据用户的位置更新实时更新相机的位置。

var isAnimating = false
var currentCameraPosition: CameraPosition? = null // save the current camera position

// Initialize the camera position with your initial options
val initialCameraPosition = CameraPosition.Builder()
    .target(currentUserPosition)
    .zoom(INITIAL_ZOOM_LEVEL) // Set initial zoom level
    .build()

val initialOptions = CameraOptions.Builder()
    .camera(initialCameraPosition)
    .build()

val animationOptions = MapAnimationOptions.Builder()
    .duration(500)
    .animatorListener(animationListener)
    .build()

map.easeTo(initialOptions, animationOptions)

location.addOnIndicatorPositionChangedListener { userLocation ->
    if (!isAnimating) {
        // Update the target LatLng of the currentCameraPosition
        currentCameraPosition = CameraPosition.Builder(currentCameraPosition)
            .target(userLocation)
            .build()

        val options = CameraOptions.Builder()
            .camera(currentCameraPosition)
            .build()

        map.setCamera(options)
        gestures.focalPoint = map.pixelForCoordinate(userLocation)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.