【问题标题】:GoogleMap.CancelableCallback() onFinish() is called before the animation finishGoogleMap.CancelableCallback() onFinish() 在动画结束前被调用
【发布时间】:2021-10-18 22:03:32
【问题描述】:

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

这就是我所拥有的


        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 这意味着动画尚未完成,地图尚未放大。

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

为什么会这样?这是 google map 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)

【问题讨论】:

标签: android google-maps google-maps-android-api-2


【解决方案1】:

无论如何,您都可以使用解决方法:通过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}")
}
...

【讨论】:

  • 感谢您的建议。但我更感兴趣的是找出为什么在动画结束之前有时会调用回调。如果在动画完成之前调用回调,onFinish() 中的 visibleRegion 可能仍然是动画之前的区域,因此仍然是同样的问题
  • @BabyishTank 不客气! moveCamera() 立即停止任何动画,因此,在 moveCamera() 之后,visibleRegion 应该是正确的。
猜你喜欢
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
相关资源
最近更新 更多