Acercar a los marcadores google map V2

Tengo un ArrayList de un objeto de encargo con lat y propiedades largas.

He logrado poner marcadores en el mapa. Lo que quiero es poder acercar a esos marcadores cuando el mapa se carga.

Lo que he intentado a continuación hace que la aplicación se bloquee.

Aquí está el código para cargar el mapa:

 public void getBridgeData() { db = new DbHelperClass(this); bridges = db.getAllBridges(); DecimalFormat dc = new DecimalFormat("#.000"); Builder builder = new LatLngBounds.Builder(); for (int i= 0;i<bridges.size();i++) { Bridge b= (Bridge)bridges.get(i); double lati= b.getLatitude(); double longo= b.getLongitude(); double reflat= b.getReflat(); double reflong= b.getReflong(); LatLng start = new LatLng(reflat,reflong); LatLng end = new LatLng(lati,longo); GeneralUtils uts = new GeneralUtils(); double ch= uts.calculateDistance(start, end); String chainage = dc.format(ch); String mysnipet = "Location:" + b.getRoadname() + " " + chainage; Marker mm=map.addMarker(new MarkerOptions().position(new LatLng(lati, longo)) .title(b.getBridgename()) .snippet(mysnipet)); builder.include(mm.getPosition()); } LatLngBounds bounds= builder.build(); map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 15)); map.setMapType(GoogleMap.MAP_TYPE_HYBRID); } 

Aquí también parte del código

 public class MainActivity extends FragmentActivity { private GoogleMap map; private DbHelperClass db; private List<Bridge> bridges = new ArrayList<Bridge>(); CameraUpdate cu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_map); //AddSomeData(); map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)) .getMap(); if(map!=null) { getBridgeData(); } } } 

Aquí está el registro de errores:

 05-30 22:19:28.894: E/AndroidRuntime(5593): FATAL EXCEPTION: main 05-30 22:19:28.894: E/AndroidRuntime(5593): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bridge.bridgeinventory/com.bridge.bridgeinventory.MainActivity}: java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int): 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. 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1755) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1774) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread.access$1500(ActivityThread.java:157) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1001) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.os.Handler.dispatchMessage(Handler.java:130) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.os.Looper.loop(SourceFile:351) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread.main(ActivityThread.java:3841) 05-30 22:19:28.894: E/AndroidRuntime(5593): at java.lang.reflect.Method.invokeNative(Native Method) 05-30 22:19:28.894: E/AndroidRuntime(5593): at java.lang.reflect.Method.invoke(Method.java:538) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:727) 05-30 22:19:28.894: E/AndroidRuntime(5593): at dalvik.system.NativeStart.main(Native Method) 05-30 22:19:28.894: E/AndroidRuntime(5593): Caused by: java.lang.IllegalStateException: Error using newLatLngBounds(LatLngBounds, int): 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. 05-30 22:19:28.894: E/AndroidRuntime(5593): at kbh.b(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at mas.a(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at mal.a(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at mbi.a(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at fms.onTransact(SourceFile:83) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.os.Binder.transact(Binder.java:310) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.bridge.bridgeinventory.MainActivity.getBridgeData(MainActivity.java:148) 05-30 22:19:28.894: E/AndroidRuntime(5593): at com.bridge.bridgeinventory.MainActivity.onCreate(MainActivity.java:44) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1082) 05-30 22:19:28.894: E/AndroidRuntime(5593): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1719) 05-30 22:19:28.894: E/AndroidRuntime(5593): ... 11 more 

¿Cómo puedo hacer que funcione?

El problema es que el mapa no está cargado todavía en el diseño por eso tienes ese error

Solución:

  map.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { @Override public void onMapLoaded() { map.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 15)); map.setMapType(GoogleMap.MAP_TYPE_HYBRID); } }); 

Llamará a ese método cuando el mapa ya esté cargado en el diseño.

  • Manejo del caso cuando se ha perdido un giro en Google Maps
  • Google Maps Android, detecta la interacción del usuario en un mapa de la ubicación
  • Servicios de Google Play que no funcionan en el emulador de Android API Nivel 11
  • Android obtener y analizar Google Directions
  • Android Maps error "No se pudo encontrar la clase 'android.app.AppOpsManager'"
  • Mapa de Google que muestra texto de derechos de autor adicional en algunos dispositivos
  • Cómo encontrar el nivel de zoom basado en círculo dibujar en el mapa
  • ¿Cómo cambiar el icono de marcador de lo que fue aprovechado?
  • Marcador de ubicación actual de Google Maps y superposición de radio de precisión
  • Google Maps CameraUpdateFactory no se ha inicializado
  • Problema de contexto en el ejemplo de Android "Google Map View"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.