Google地图适当填充标记周围

时间:2015-11-30 10:54:49

标签: android google-maps

我目前有以下代码:

private void updateCamera() {
    if (markerOptionses.isEmpty()) {
        return;
    }
    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (LatLng position : markerOptionses.keySet()) {
        builder.include(position);
    }
    final LatLngBounds bounds = builder.build();

    MainActivity.getInstance().runOnUiThread(
            new Runnable() {
                @Override
                public void run() {
                    if (mapView.getParent() != null) {
                        CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(
                                bounds,0                                  );
                        mapView.getMap().animateCamera(cu);
                    }
                }
            }                               );
}

这段代码非常适合缩放,因此所有标记位置都在视图内。然而问题是,顶部的“引脚”被切断了。它固定的点完全显示,但标记本身不是。

要解决此问题,我可以在CameraUpdate中添加填充,从而产生类似

的内容
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds,50);

这适用于较小的设备,但在较大的设备上50太少。如果我将它设置为150,那么在较大的设备上工作正常,但在较小的设备上工作得太多。

解决这个问题的好方法是什么?有没有办法找出标记的高度(以像素为单位)并将其用作填充左右?

1 个答案:

答案 0 :(得分:0)

See the Android documentation for CameraUpdateFactory#newLatLngBounds(LatLngBounds, int):

  

padding空格(以px为单位)在边界框边和视图边之间留下。此值将应用于边界框的所有四个边。

因此,您需要计算标记的大小,这将构成填充的基础:

private int calculateMapMarkerPadding() {
    BitmapDrawable bd = (BitmapDrawable) ContextCompat
            .getDrawable(this, R.drawable.map_marker);
    final int width = bd.getBitmap().getWidth();
    final int height = bd.getBitmap().getHeight();
    return (int)Math.round(Math.max(width, height) * MAP_BOUNDS_PADDING);
}

注意:乘以MAP_BOUNDS_PADDING(例如1.2或120%),而不是使用固定金额。然后更新您的地图相机代码:

    final int padding = calculateMapMarkerPadding();
    final CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
    mapView.getMap().animateCamera(cu);