如何连接CameraUpdate动画

时间:2018-01-26 14:53:18

标签: android google-maps android-maps-v2

我想要运行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,它不会在屏幕上居中。

有什么想法吗?感谢。

1 个答案:

答案 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));
...