6

podczas ładowania mapy google na urządzeniu otrzymuję poniżej ekranu czasami.it przychodzi na drugim obciążeniu, jak pokazano poniżej. google map inaczej przychodzi idealnie jak normalna mapa google z trasą używam SupportmapFragment i otrzymuję obiekt googleMap jako.otrzymywanie niejednoznacznego ekranu nieba podczas ładowania mapy google

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

poniżej kod do wyświetlania mapy w działaniu/fragmentu

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

to pytanie w związku z zoom over specific route google map. za pomocą tego, że otrzymuję właściwą trasę z mapbounds, ale nie wiem, dlaczego ten ekran jest wyświetlany.

Nie otrzymuję cordinates 0.0 i debugowania, że ​​klucz APi jest również prawidłowe.

+0

Skąd dzwonisz 'drawRouteIntoMap' od? dlaczego ustawiasz tam "GoogleMap.OnMapLoadedCallback"? – antonio

+0

@antonio po załadowaniu mapy i wyświetleniu trasy tam. –

+0

Ale mapa może być w pełni załadowana przed ustawieniem 'GoogleMap.OnMapLoadedCallback', a następnie nie będzie miała żadnego efektu. Czy próbowałeś robić rzeczy, które robisz w metodzie 'onMapLoaded' bezpośrednio wewnątrz' if (Validator.isNotNull (opcja)) {' – antonio

Odpowiedz

5

Telefonujesz moveCamera dwukrotnie. Pierwszy próbuje przesunąć kamerę, ale drugi nie czeka na zakończenie pierwszej i wykonuje pomniejszenie.

To może nie zdarzyć się tak często i może zachowywać się inaczej na różnych urządzeniach.

Najlepszym rozwiązaniem jest ustawienie wyściółkę na swój CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0) zamiast 0

3

Ten problem występuje, gdy współrzędne nie są poprawnie ustawione. Upewnij się, że współrzędne, których używasz, wskazują teren, aby uzyskać prawidłowe mapy. Innym możliwym powodem jest to, że klucz API nie działa, spróbuj wygenerować nowy klucz API dla tego projektu.

Aby uzyskać więcej informacji, sprawdź te powiązane pytania dotyczące SO.

+0

Zdarza się tylko drugi raz, gdy ładuję tę samą mapę z tymi samymi kordinatami –

+0

jak mogę zapobiec takiej sytuacji i pozycji właściwie odwzorowuję, chociaż kordinaty są poprawne i nie jest 0.0 –