我想要运行CameraUpdateFactory.newLatLngBounds
动画,docs状态:
返回一个CameraUpdate,用于转换相机以便 指定的纬度/经度界限是以屏幕为中心 最大可能缩放的指定尺寸的边界框 水平。您可以指定其他填充,以进一步限制 边界框的大小。返回的CameraUpdate的方位为0 倾斜度为0。
但我不希望它以屏幕为中心,我想向上移动焦点区域,想象一下“align_parent_top”。所以我有一个CameraUpdateFactory.scrollBy
来实现它。
CameraUpdate move = CameraUpdateFactory.newLatLngBounds(
builder.build(),
getUtils().getScreenAbsoluteWith(),
mAvailableHeight,
mDefaultMapPadding);
CameraUpdate scroll = CameraUpdateFactory.scrollBy(0,mAvailableHeight + mDefaultMapPadding));
然后:
mMap.animateCamera(move, new GoogleMap.CancelableCallback() {
@Override
public void onFinish() {
mMap.animateCamera(scroll);
@Override
public void onCancel() {}
});
不幸的是,我真正想要的是同时运行两个动画。或者,不知何故,创建一个CameraUpdateFactory.newLatLngBounds
,它不会在屏幕上居中。
有什么想法吗?感谢。
答案 0 :(得分:2)
只需将Lat / Lng边界转换为屏幕像素,然后添加像素,然后将像素转换为Lat \ Lng:
...
private GoogleMap mGoogleMap;
...
// convert LatLng bounds to screen coords
Point pointNortheast = projection.toScreenLocation(latLngBounds.northeast);
Point pointSouthwest = projection.toScreenLocation(latLngBounds.southwest);
// modify bounds in screen coords
pointNortheast.y += scrollByPixel;
pointSouthwest.y += scrollByPixel;
// convert screen coords back to LatLng
LatLng geoNortheast = projection.fromScreenLocation(pointNortheast);
LatLng geoSouthwest = projection.fromScreenLocation(pointSouthwest);
LatLngBounds modifiedBounds = new LatLngBounds(geoSouthwest, geoNortheast);
// animate camera to new bounds
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngBounds(modifiedBounds, 0));
...