6

beim Laden google map auf dem Gerät Ich erhalte unter screenshow.something.it kommt bei der zweiten Belastung wie unten angezeigt. google map sonst kommt es perfekt als normale google map mit route Ich benutze SupportmapFragment und bekomme googleMap objekt als.mehrdeutigen Himmel Bildschirm beim Laden google Karte

supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_view_fragment); 

unten Codekarte in Aktivität/Fragmente

public static void drawRouteIntoMap(final List<? extends MapHelper> position, final GoogleMap googleMap) { 
     /*List<MapHelper> position = new ArrayList<MapHelper>(); 
     for (int i = lastPosition; i < maps.size(); i++) { 
      position.add(maps.get(i)); 
     }*/ 
     final LatLngBounds.Builder mapBounds = new LatLngBounds.Builder(); 
     if (position.size() > 0 && Validator.isNotNull(googleMap)) { 
      googleMap.clear(); 
      List<PolylineOptions> polylineOptionses = new ArrayList<PolylineOptions>(); 
      PolylineOptions option = null; 
      Boolean lastPause = null; 
      for (MapHelper map : position) { 
       if (map.isPause()) { 
        if (Validator.isNull(lastPause) || !lastPause) { 
         option = new PolylineOptions().width(5).color(Color.rgb(255, 0, 155)).geodesic(true); 
         polylineOptionses.add(option); 
        } 
        mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude())); 
        option.add(new LatLng(map.getLatitude(), map.getLongitude())); 
       } else { 
        if (Validator.isNull(lastPause) || lastPause) { 
         option = new PolylineOptions().width(5).color(Color.rgb(0, 179, 253)).geodesic(true); 
         polylineOptionses.add(option); 
        } 
        mapBounds.include(new LatLng(map.getLatitude(),map.getLongitude())); 
        option.add(new LatLng(map.getLatitude(), map.getLongitude())); 
       } 
       lastPause = map.isPause(); 
      } 
      for (PolylineOptions options : polylineOptionses) { 
       googleMap.addPolyline(options); 
      } 
      if(Validator.isNotNull(option)){ 
       //List<LatLng> points = option.getPoints(); 


       googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() { 
        @Override 
        public void onMapLoaded() { 
         LatLng startPoint = new LatLng(position.get(0).getLatitude(), position.get(0).getLongitude()); 
         googleMap.addMarker(new MarkerOptions().position(startPoint).title("start").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); 
         mapBounds.include(startPoint); 
         LatLng endPoint = new LatLng(position.get(position.size() - 1).getLatitude(), position.get(position.size() - 1).getLongitude()); 
         mapBounds.include(endPoint); 
         googleMap.addMarker(new MarkerOptions().position(endPoint).title("finish").icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
         googleMap.setPadding(15, 205, 10, 110); 
         googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0)); 
         //googleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 10)); 
         googleMap.moveCamera(CameraUpdateFactory.zoomOut()); 

        } 
       }); 
      } 

     } 
    } 


supportMapFragment.getMapAsync(new OnMapReadyCallback() { 
      @Override 
      public void onMapReady(GoogleMap googleMap) { 
       if (Validator.isNotNull(googleMap)) { 
        googleMap.setMyLocationEnabled(false); 
        googleMap.clear(); 
        googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 
         @Override 
         public void onMapClick(LatLng latLng) { 
          if (activity.preferences.isSaveScreen()) { 
           facebook.setChecked(false); 
           twitter.setChecked(false); 
           activity.replaceFragment(new FullMapFragment(), null); 
          } 
          if (!activity.preferences.isSaveScreen()) { 
           activity.preferences.setHistoryScreen(true); 
           activity.replaceFragment(new FullMapFragment(), null); 
          } 
         } 
        }); 
        if (gps) { 
         nonGpsSummary.setVisibility(View.GONE); 
         List<HistoryMap> historyMaps = new ArrayList<HistoryMap>(); 
         if (Validator.isNotNull(activity.preferences.getUserHistory().getHistoryMaps())) { 
          historyMaps.addAll(Arrays.asList(activity.preferences.getUserHistory().getHistoryMaps())); 
         } 
         if (historyMaps.size() > 0) { 
          if (Validator.isNotNull(googleMap)) { 
           drawRouteIntoMap(historyMaps, googleMap); 
          } 
         } else { 
          mapFrame.setVisibility(View.GONE); 
         } 
        } else { 
         gpsSummary.setVisibility(View.GONE); 
        } 
       } 
      } 
     }); 

diese Frage ist im Zusammenhang mit zoom over specific route google map zur Anzeige. mit dem ich bekomme richtige Route mit Mapbounds aber ich verstehe nicht, warum dieser Bildschirm angezeigt wird.

Ich bekomme keine Koordinaten 0.0 Ich debug, dass, API-Schlüssel ist auch richtig.

+0

wo rufen Sie 'drawRouteIntoMap' aus? Warum setzen Sie dort eine 'GoogleMap.OnMapLoadedCallback'? – antonio

+0

@antonio nach map voll geladen ich zeige Route dort. –

+0

Aber die Karte kann vollständig geladen werden, bevor Sie Ihre 'GoogleMap.OnMapLoadedCallback' festlegen und dann wird es keine Wirkung haben. Haben Sie versucht, die Sachen zu tun, die Sie in Ihrer 'onMapLoaded' Methode direkt in der' if (Validator.isNotNull (Option)) {' – antonio

Antwort

5

Sie rufen zweimal moveCamera. Der erste versucht die Kamera zu bewegen, aber der zweite wartet nicht bis der erste aufhört zu zoomen.

Dies passiert möglicherweise nicht immer und kann sich auf verschiedenen Geräten unterschiedlich verhalten.

Die beste Möglichkeit ist, eine Polsterung setzen auf Ihrer CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0) statt 0

3

Dieses Problem tritt auf, wenn Ihre Koordinaten nicht richtig festgelegt sind. Stellen Sie sicher, dass die Koordinaten, die Sie verwenden, auf das Land zeigen, um die Karten korrekt zu erhalten. Ein anderer möglicher Grund ist, dass Ihr API-Schlüssel nicht funktioniert, versuchen Sie, einen neuen API-Schlüssel für dieses Projekt zu generieren.

Weitere Informationen finden Sie in diesen verwandten SO-Fragen.

+0

es passiert nur zweite Male, wenn ich die gleiche Karte mit den gleichen Koordinaten laden –

+0

Wie kann ich solche Situation und Position Karte richtig zu verhindern, obwohl Koordinaten sind richtig und es ist nicht 0.0 –

Verwandte Themen