2013-05-07 60 views
13

Tôi muốn đặt mức thu phóng bản đồ để phù hợp với tất cả các điểm đánh dấu trên bản đồ. Tôi đã sử dụng phương pháp sau đây như đã nói bởi nhiều người, nhưng nó không làm việc cho tôi. Nó đang hiển thị một số điểm khác.thu phóng để phù hợp với tất cả các điểm đánh dấu trên bản đồ google maps v2

if (positions.size() > 0) { 

    final LatLngBounds.Builder builder = new LatLngBounds.Builder(); 
    for (Marker m : positions) { 
     builder.include(m.getPosition()); 
    } 
    builder.include(positions.get(i).getPosition()); 
} 

try { 
    googleMap.setOnCameraChangeListener(new OnCameraChangeListener() { 

     @Override 
     public void onCameraChange(CameraPosition arg0) { 

      googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
        builder.build(), UserDataManager.getInstance().getWidth(), 
        UserDataManager.getInstance().getWidth(),0)); 
      googleMap.setOnCameraChangeListener(null); 

     } 
    }); 

} catch (IllegalStateException e) { 
    // TODO: handle exception 
    final View mapView = getSupportFragmentManager() 
      .findFragmentById(R.id.map).getView(); 
    if (mapView.getViewTreeObserver().isAlive()) { 
     mapView.getViewTreeObserver().addOnGlobalLayoutListener(
      new OnGlobalLayoutListener() { 

       // We check which build version we are using. 
       @Override 
       public void onGlobalLayout() { 
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
         mapView.getViewTreeObserver() 
           .removeGlobalOnLayoutListener(
             this); 
        } else { 
         mapView.getViewTreeObserver() 
           .removeOnGlobalLayoutListener(
             this); 
        } 

        googleMap.setOnCameraChangeListener(new OnCameraChangeListener() { 

         @Override 
         public void onCameraChange(CameraPosition arg0) { 

          googleMap.moveCamera(CameraUpdateFactory.newLatLngBounds(
            builder.build(), 
            UserDataManager.getInstance().getWidth(), 
            UserDataManager.getInstance().getWidth(),0)); 
          googleMap.setOnCameraChangeListener(null); 

         } 
        }); 

       } 
      }); 
     } 
    } 
} 
+0

Cảm ơn để xử lý IllegalStateException :) – Hazlo8

Trả lời

45

Hãy thử sử dụng này

//Calculate the markers to get their position 
LatLngBounds.Builder b = new LatLngBounds.Builder(); 
for (Marker m : markers) { 
    b.include(m.getPosition()); 
} 
LatLngBounds bounds = b.build(); 
//Change the padding as per needed 
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 25,25,5); 
mMap.animateCamera(cu); 

Kiểm tra Google Maps v2 library này mà tôi đã tạo ra bao gồm chức năng này chỉ cần sử dụng

Marker m1,m2, m3, m4 .... ; 

mapHelper.zoomToFitMarkers(m1,m2, m3, m4 ....); 

EDIT:

Nhận vị trí hiện tại

LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
//You can use GPS_PROVIDER also 
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() { 

     @Override 
     public void onStatusChanged(String provider, int status, Bundle extras) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderEnabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onLocationChanged(Location location) { 
      // TODO Auto-generated method stub 
      currentLatitude = location.getLatitude(); 
      currentLongitude = location.getLongitude(); 
      //Add your marker here and zoom to fit it 
      //mapHelper.zoomToFitMarkers(m1,m2, m3, m4,mapHelper.addMarker(currentLatitude,currentLongitude,"Current Location");); 
     } 
    }); 
+0

tôi đang nhận được cùng một kết quả :( – Sharmilee

+0

này nên làm việc. Chỉ cần không mã hóa 5 pixel và sử dụng pixel độc lập với mật độ thay thế. –

+1

bằng cách sử dụng mã này tôi nhận được một lỗi như "kích thước của bản đồ không nên là 0" ... bất kỳ ý tưởng? –

3
mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(builder.build(), 15)); 
+0

hãy thử điều bạn đang làm việc cho mình. Hy vọng nó sẽ làm việc cho tất cả. –