GoogleMap.CancelableCallback() onFinish() 在动画结束前被调用

GoogleMap.CancelableCallback() onFinish() is called before the animation finish

我在 Android 中有一个 google 地图屏幕。我想移动和缩放相机到一个位置,并在动画完成后获取边界和缩放级别。

这就是我的


        val location = LatLng(33.7701, -118.1937)
        val DEFAULT_ZOOM_LEVEL = 13F
        googleMap.animateCamera(
            CameraUpdateFactory.newLatLngZoom(location, DEFAULT_ZOOM_LEVEL),
            object: GoogleMap.CancelableCallback{
                override fun onFinish() {
                    val visibleRegion = googleMap.projection.visibleRegion

                    Timber.i("zoom level is ${googleMap.cameraPosition.zoom}")
                }

                override fun onCancel() {
                    Timber.i("Animate Camera Canceled")
                }
            }
        )
    }

大部分时间都运行良好。 onFinish() 原木缩放级别为 13.0

但偶尔,onFinish() 木材日志缩放级别为 2.0 这意味着动画还没有完成,地图还没有放大。

我尝试了 的建议 但是,设置durationMs参数只会减慢动画速度,并不能确保在动画完成后调用onFinish()。

为什么会这样?这是 google 地图 Android 中的错误吗?

我正在使用 com.google.android.gms:play-services-maps:17.0.1 引用 https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap#animateCamera(com.google.android.gms.maps.CameraUpdate,%20com.google.android.gms.maps.GoogleMap.CancelableCallback)

无论如何你都可以使用解决方法:通过 moveCamera() 调用将相机移动到 onFinish() 中的目标位置,然后获取投影:

...
override fun onFinish() {
    googleMap.moveCamera(<YOUR_DESIRED_TARGET_POSITION_AND_ZOOM>)
    val visibleRegion = googleMap.projection.visibleRegion
    Timber.i("zoom level is ${googleMap.cameraPosition.zoom}")
}
...