有时,当尝试使用getLatitudeSpan()和getLongitudeSpan()获取mapview的纬度范围或经度范围时,我分别获得0和360 * 1E6.这不会永远发生,但这是一个问题,有人有这个问题吗?任何解决方法?我也尝试使用getProjection(),但我遇到了同样的问题.这是一段代码:
MapView mapView = (MapView) findViewById(R.id.mapview); int lat = mapView.getLatitudeSpan(); // sometimes returns 0 int long = mapView.getLongitudeSpan(); // sometimes returns 360*1E6
解决方法
我会检测到这种情况并安排你的工作在几百毫秒后再试一次. AFAIK,这些值最终会变得可用,但它们可能与时间相关.理论上,它们应该在您设置中心并设置缩放后进行计算,但我怀疑它们在MapView渲染之后才真正计算,并且可能直到下载了一些来自Internet的地图数据.
因此,将依赖于这些跨度的代码隔离到方法中.从onCreate()和AsyncTask调用该方法,可能正如您今天所做的那样.但是,添加检测逻辑以查找无效值,然后在MapView(或其他一些View)上调用postDelayed(),以便在几百毫秒后再次调用您的方法(如果值无效).你可能还需要添加一些计数器,这样你就不会无限期地执行这个postDelayed()的东西.
当然,这是一个黑客攻击.但是,由于谷歌地图组件不是开源的,因此很难找到更稳固的东西.