Android 应用程序:Google 地图在设置地图边界时有奇怪的行为

Android app: Google map has strange behavior when setting map bounds

所以我想构建一个 android 应用程序,其中包含显示 google 地图的片段。打开片段时,应仅显示汉堡中这两个边界内的地图部分:LatLng((53.394655), 10.099891) 和 LatLng((53.694865), 9.757589)。 这是片段代码:

 class MapFragment : Fragment(), OnMapReadyCallback {
        private lateinit var map: GoogleMap
    
        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
            // Inflate the layout for this fragment
            val binding: FragmentMapBinding =
                DataBindingUtil.inflate(inflater, R.layout.fragment_map, container, false)
             
            binding.setLifecycleOwner(this)
            // Get the SupportMapFragment and request notification when the map is ready to be used.
            val mapFragment =
                getChildFragmentManager().findFragmentById(R.id.map) as? SupportMapFragment
            mapFragment?.getMapAsync(this)
            return binding.root
        }
    
        override fun onMapReady(googleMap: GoogleMap) {
            map = googleMap
            zoomToHamburgBounds()
        }
    
        private fun zoomToHamburgBounds() {
            val hamburgBounds =LatLngBounds(
                LatLng((53.394655), 10.099891) , // SW bounds
             LatLng((53.694865), 9.757589) )// NE bounds
            map.moveCamera(CameraUpdateFactory.newLatLngBounds(hamburgBounds,10))
        }
    }

当我 运行 应用程序时,地图聚焦在加拿大附近的某个地方,并且在放大或缩小时有奇怪的行为。我无法弄清楚问题所在,与 google map api 的连接是成功的,我添加了依赖项和清单标签。 我将不胜感激

谢谢

我正在努力找出问题所在,因为看起来你做的一切都是正确的。

但是,您未能附上可能有助于诊断问题的 LogCat,我花了一些时间尝试重现它,我收到的消息是

Map size can’t be 0. Most likely, layout has not yet occured for the map view. Either wait until layout has occurred or use newLatLngBounds(LatLngBounds, int, int, int) which allows you to specify the map’s dimensions.

这让我相信这是一个生命周期问题,您需要等待地图准备好使用

map.setOnMapLoadedCallback {
   zoomToHamburgBounds()
}

我不确定为什么这么长时间没有更新这里的文档,但我怀疑它们是问题的一部分:https://developers.google.com/maps/documentation/android-sdk/start#look_at_the_code

我已经将一个回购推送到 Github 供您参考。尝试拉动它并设置您的 API 密钥以验证解决方案。

https://github.com/LDuncAndroid/Google-Maps-Bounds

编辑:事实上,回到这个问题上,我相信回调解决方案和使用 LatLngBounds.Builder() 是完整的解决方案`。我不相信我们可以查看那个 class 的来源,但显然有一些事情在使用构造函数时没有做。