1
大多數例子我能找到的淨使用現在已經過時的GetMap()方法。 Google說使用getMapAsync()。我可以在我的地圖上繪製標記,但是當我包含邊界代碼時,我得到一個IllegalStateException。所以,我的問題我該如何正確設置LatLngBounds.Builder?GOOGLEMAPS設定Android的界定
代碼和logcat的遵循:
public class TripsMap extends FragmentActivity implements OnMapReadyCallback {
MapView mMapView;
private GoogleMap googleMap;
GoogleMapOptions options = new GoogleMapOptions();
private LatLngBounds.Builder bounds;
Trips trip;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.trips_map_fragment);
Bundle extras = getIntent().getExtras();
trip = (Trips) extras.getSerializable("tripInfo");
MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
bounds = new LatLngBounds.Builder();
int subTrips = trip.getSubtripsNum();
for (int i=0; i<subTrips; i++) {
SubTrips st = trip.getSubTrips().get(i);
//major origin
googleMap.addMarker(new MarkerOptions()
.position(convertLatLng(st.originCoords))
.title(st.origin));
Log.i("MAJOR", st.origin);
//use .include to put add each point to be included in the bounds
bounds.include(convertLatLng(st.originCoords));
int minor = st.intermediateStation.size();
for (int j=0; j<minor; j++){
IntermediateStops is = st.intermediateStation.get(j);
//minor stop
googleMap.addMarker(new MarkerOptions()
.position(convertLatLng(is.coords))
.title(is.stationName));
}
//major destination
googleMap.addMarker(new MarkerOptions()
.position(convertLatLng(st.destCoords))
.title(st.destination));
bounds.include(convertLatLng(st.destCoords));
}
googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds.build(), 50));
}
public LatLng convertLatLng(String s) {
String[] latlong = s.split(",");
double latitude = Double.parseDouble(latlong[0]);
double longitude = Double.parseDouble(latlong[1]);
LatLng ll = new LatLng(latitude, longitude);
return ll;
}
}
的logcat:
FATAL EXCEPTION: main
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.
at com.google.k.a.cj.b(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.c.a(Unknown Source)
at com.google.maps.api.android.lib6.c.dp.a(Unknown Source)
at com.google.maps.api.android.lib6.gmm6.c.c.a(Unknown Source)
at com.google.maps.api.android.lib6.c.el.a(Unknown Source)
at com.google.android.gms.maps.internal.l.onTransact(SourceFile:83)
at android.os.Binder.transact(Binder.java:326)
at com.google.android.gms.maps.internal.IGoogleMapDelegate$a$a.moveCamera(Unknown Source)
at com.google.android.gms.maps.GoogleMap.moveCamera(Unknown Source)
at mtr.se.reskoll.TripsMap.onMapReady(TripsMap.java:87)
at com.google.android.gms.maps.MapFragment$a$1.a(Unknown Source)
at com.google.android.gms.maps.internal.m$a.onTransact(Unknown Source)
at android.os.Binder.transact(Binder.java:326)
at com.google.android.gms.maps.internal.ba.a(SourceFile:82)
at com.google.maps.api.android.lib6.c.er.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)
當我有如何被一個應該硬代碼與寬度和高度的片段設置爲match_parent和WRAP_CONTENT該成像素? – tomislav2012 2015-03-13 12:37:11