我目前有以下代码:
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,那么在较大的设备上工作正常,但在较小的设备上工作得太多。
解决这个问题的好方法是什么?有没有办法找出标记的高度(以像素为单位)并将其用作填充左右?
答案 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);