调整地图以包含标记信息 window

Adjust map to contain marker info window

我正在使用 osmdroid 和 osmbonuspack 库。在 activity 中,我有一张地图,其中包含来自 osmbonuspack 的多个标记,点击时每个标记都会打开一个信息窗口。但是当标记靠近 MapView 的上边缘时,它的信息窗口会打开超出范围。有没有一种方法可以调整地图视图,以便像 iOS 库一样完全显示标记的信息窗口? https://www.mapbox.com/ios-sdk/examples/marker/

我通过覆盖标准的 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);

}