MapView не занимает полный экран - PullRequest
1 голос
/ 17 февраля 2012

Я использую mapview, чтобы показать позиции пары пользователей. Я использую один из методов, перечисленных здесь, чтобы установить уровень масштабирования карты соответствующим образом, чтобы показать все контакты.

Но проблема, с которой я столкнулся, заключается в том, что, когда контакты расположены по всему миру, уровни масштабирования максимально увеличены, и я получаю это белое пространство сверху и снизу карты.

Есть ли способ это исправить, я просто хочу, чтобы сетка карт заполняла эту область вместо цвета. Вот картинка и xml

enter image description here

<com.google.android.maps.MapView
    xmlns:android="http://schemas.android.com/apk/res/android"    
    android:id="@+id/mapview"
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:background="#061a2f"
    android:clickable="true" android:apiKey=""/>

Ключ API не для сертификата debig, поэтому в mapview отображается только сетка. Но вы можете увидеть белое пространство. Это изменится, как только мы увеличим масштаб. Нужно ли мне проверять логику увеличения. Я думал, что максимальное уменьшение все еще заполнит доступное пространство.

Я думаю, это как-то связано с масштабированием. Из документов Google.

zoomToSpan

Попытки настроить масштаб карты так, чтобы диапазон широты и долготы будет отображаться. Потому что зум может только достичь дискретных уровней, а потому соотношение сторон карты может не соответствовать указанному соотношению, качество посадки может отличаться. единственное, что мы гарантируем, это то, что после увеличения по крайней мере один из новая широта или новая долгота будет в пределах 2 от соответствующий параметр.

Я думаю, что соотношение сторон является проблемой. Есть ли более надежный способ сделать это. Вот мой код Java.

for(Visitor visitor:mVisitors){
    LiveMapOverlay overlay = new LiveMapOverlay(new 
            PinDrawable(mContext,color),mMapView);
GeoPoint point = new GeoPoint(
            (int)(Double.valueOf(visitor.visitorInfo.latitude) * 1E6)                            
            ,(int)(Double.valueOf(visitor.visitorInfo.longitude) * 1E6));
minLatitude = minLatitude < point.getLatitudeE6() ? minLatitude :   
            point.getLatitudeE6();
maxLatitude = maxLatitude > point.getLatitudeE6() ? maxLatitude : 
            point.getLatitudeE6();
minLongitude = minLongitude< point.getLongitudeE6()? minLongitude: 
            point.getLongitudeE6();
maxLongitude = maxLongitude> point.getLongitudeE6()? maxLongitude: 
            point.getLongitudeE6();
}
mMapView.getController().setCenter(new GeoPoint((maxLatitude + minLatitude)/2 , 
        (minLongitude + maxLongitude)/2));
mMapView.getController().zoomToSpan(maxLatitude - minLatitude, maxLongitude - 
        minLongitude);

Ответы [ 2 ]

1 голос
/ 10 сентября 2012

Решено! Пожалуйста, добавьте строки кода ниже после создания вашей карты. Он работает за счет автоматического увеличения карты в 3 раза после инициализации, вы можете использовать другие факторы, если хотите.

mapView.setBuiltInZoomControls(true); 
int level = mapView.getZoomLevel();
MapController mc = mapView.getController();
mc.setZoom(level + 3);
0 голосов
/ 17 февраля 2012

Использование линейного макета перед отображением карты.

...