我正在使用osmdroid和osmbonuspack库。在活动中,我有一个带有来自osmbonuspack的几个标记的地图,每个标记在点击时打开一个InfoWindow。但是当标记靠近MapView的顶部边缘时,它的信息窗口会超出边界。有没有办法调整mapview,以便标记的InfoWindow完全呈现类似于这个iOS库? https://www.mapbox.com/ios-sdk/examples/marker/
答案 0 :(得分:0)
我设法通过覆盖标准的MarkerInfoWindow onOpen方法来解决这个问题:
@Override
public void onOpen(Object item) {
super.onOpen(item);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
int[] infoWindowTop = {0, 0};
int[] mapViewTop = {0, 0};
mView.getLocationOnScreen(infoWindowTop);
mMapView.getLocationOnScreen(mapViewTop);
int rightEnd = infoWindowTop[0] + mView.getWidth();
int dy = infoWindowTop[1] - mapViewTop[1];
int dx = infoWindowTop[0];
int dx_right = mMapView.getWidth() - rightEnd;
if (dy < 0 && dx < 0) {
smoothScrollBy(mMapView, dx, dy);
return;
}
if (dy < 0 && dx_right < 0) {
smoothScrollBy(mMapView, -dx_right, dy);
return;
}
if (dx < 0) {
smoothScrollBy(mMapView, dx, 0);
return;
}
if (dy < 0) {
smoothScrollBy(mMapView, 0, dy);
return;
}
if (dx_right < 0) {
smoothScrollBy(mMapView, -dx_right, 0);
return;
}
}
}, 500);
}