6

trong khi tải bản đồ google trên thiết bị mà tôi đang nhận được màn hình dưới đây đôi khi.nó xuất hiện trên tải thứ hai như hình dưới đây. google map nếu không nó đến hoàn hảo như bản đồ google bình thường với tuyến đường tôi đang sử dụng SupportmapFragment và nhận được đối tượng googleMap như.nhận được màn hình bầu trời mơ hồ khi tải bản đồ google

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

dưới đây là mã để hiển thị bản đồ trong hoạt động/mảnh

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

câu hỏi này là trong mối quan hệ với zoom over specific route google map. bằng cách sử dụng mà tôi có được con đường thích hợp với mapbounds nhưng tôi không nhận được lý do tại sao màn hình này được hiển thị.

tôi không nhận được cordinates 0.0 i debug rằng, api key cũng thích hợp.

+0

đâu bạn gọi 'drawRouteIntoMap' từ đâu? tại sao bạn đặt 'GoogleMap.OnMapLoadedCallback' ở đó? – antonio

+0

@antonio sau khi bản đồ được tải đầy đủ i hiển thị tuyến đường ở đó. –

+0

Nhưng bản đồ có thể được tải đầy đủ trước khi bạn đặt 'GoogleMap.OnMapLoadedCallback' và sau đó nó sẽ không có hiệu lực. Bạn đã thử làm những thứ mà bạn làm trong phương thức 'onMapLoaded' của bạn ngay bên trong' if (Validator.isNotNull (tùy chọn)) {' – antonio

Trả lời

5

Bạn đang kêu gọi moveCamera hai lần. Người đầu tiên cố gắng di chuyển máy ảnh nhưng máy ảnh thứ hai không đợi máy ảnh đầu tiên kết thúc và thực hiện thu nhỏ.

Điều này có thể không xảy ra mọi lúc và có thể hoạt động khác nhau trên các thiết bị khác nhau.

Lựa chọn tốt nhất là để thiết lập một padding trên của bạn CameraUpdateFactory.newLatLngBounds(mapBounds.build(), 0) thay vì 0

3

Sự cố này xảy ra khi tọa độ của bạn không được đặt đúng. Đảm bảo tọa độ bạn đang sử dụng đang trỏ vào vùng đất để có được bản đồ chính xác. Một lý do khác có thể là khóa API của bạn không hoạt động, hãy thử tạo khóa API mới cho dự án này.

Để biết thêm thông tin, hãy kiểm tra các câu hỏi SO có liên quan này.

+0

nó xảy ra chỉ lần thứ hai khi tôi tải cùng một bản đồ với cùng một cordinates –

+0

làm thế nào tôi có thể ngăn chặn tình hình như vậy và bản đồ posiiton đúng mặc dù cordinates là thích hợp và nó không phải là 0.0 –

Các vấn đề liên quan