2

我在我的应用程序中使用maps api v2。我必须在地图上显示我的当前位置和目标位置,以便这两个位置在屏幕上都是可见的(以最大可能的缩放级别)。这是我到目前为止所尝试的......

googleMap = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.mapFragment)).getMap();

 if(googleMap != null){

        googleMap.setMyLocationEnabled(true);
        LatLng targetLocationLatLng = new LatLng(modelObject.getLattitude(), modelObject.getLongitude());
        LatLng currentLocationLatLng = new LatLng(this.currentLocationLattitude, this.currentLocationLongitude);
        googleMap.addMarker(new MarkerOptions().position(targetLocationLatLng).title(modelObject.getLocationName()).icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon)));
        LatLngBounds bounds = new LatLngBounds(currentLocationLatLng, targetLocationLatLng);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 3));

    }

由于以下原因,应用程序被强制关闭: java.lang.IllegalStateException: Map大小不应为 0。最有可能的是,layout地图视图尚未发生。

我怎样才能获得最大可能的缩放级别?请帮我。

4

2 回答 2

19

在我的项目中,我使用com.google.android.gms.maps.model.LatLngBounds.Builder

适应您的源代码,它应该看起来像这样:

Builder boundsBuilder = new LatLngBounds.Builder();
boundsBuilder.include(currentLocationLatLng);
boundsBuilder.include(targetLocationLatLng);
// pan to see all markers on map:
LatLngBounds bounds = boundsBuilder.build();
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 3));
于 2013-03-05T14:05:01.537 回答
1

避免此问题的一个好方法是对包含地图片段和侦听器的布局使用 ViewTreeObserver,以确保首先使用 addOnGlobalLayoutListener 初始化布局(并且没有宽度=0),如下所示:

  private void zoomMapToLatLngBounds(final LinearLayout layout,final GoogleMap mMap, final LatLngBounds bounds){

    ViewTreeObserver vto = layout.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @SuppressWarnings("deprecation")
        @Override 
        public void onGlobalLayout() { 
          layout.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
          mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,OVERVIEW_MAP_PADDING));
        } 
    });

}
于 2013-07-17T11:23:29.480 回答