Zoom sur les marqueurs google map V2

J’ai un ArrayList d’un object personnalisé avec des propriétés lat et long.

J’ai réussi à mettre des marqueurs sur la carte. Ce que je veux, c’est pouvoir zoomer sur ces marqueurs lors du chargement de la carte.

Ce que j’ai essayé ci-dessous provoque le blocage de l’application.

Voici le code pour charger la carte:

 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); } 

Ici aussi une partie du code

 public class MainActivity extends FragmentActivity { private GoogleMap map; private DbHelperClass db; private List bridges = new ArrayList(); 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(); } } } 

Voici le journal des erreurs:

 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 

Comment puis-je le faire fonctionner?

Le problème est que la carte n’est pas encore chargée dans la mise en page, c’est pourquoi vous avez eu cette erreur

Solution:

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

Elle appellera cette méthode lorsque la carte est déjà chargée dans la présentation.