我想同时缩放和滚动GoogleMap对象。不幸的是,好像我只进行了两个moveCamera调用(一个接一个),似乎第二个调用才生效。

另一种方法是传递CameraPosition,但不幸的是,看起来CameraPosition构造函数没有采用处理滚动量的参数(与缩放级别无关),而只是采用关于纬度/经度的参数要去。

是否有一些巧妙的方法来组合/连接CameraUpdate对象,所以我可以发出一个可以同时进行平移和缩放的moveCamera命令?

我认为这是可能的,因为您可以在触摸 map 时做到这一点。放下两根手指,您可以展开手指来放大/缩小,同时移动它们可以平移和移动手指。

最佳答案

看来最好的选择是修改调用CameraPosition时返回的GoogleMap.getCameraPosition()对象。但是,您将无法仅通过滚动的像素数来增加CameraPosition对象的纬度和经度。您必须获取CameraPosition的LatLng坐标,使用Point类将其转换为Projection对象,修改Point,然后将其转换回LatLng对象。

例如:

GoogleMap map; // This is your GoogleMap object
int dx; // X distance scrolled
int dy; // Y distance scrolled
float dz; // Change in zoom level
float originalZoom;

CameraPosition position = map.getCameraPosition();
Project projection = map.getProjection();

LatLng mapTarget = position.target;
originalZoom = position.zoom;

Point mapPoint = projection.toScreenLocation(mapTarget);
mapPoint.x += dx;
mapPoint.y += dy;
mapTarget = projection.fromScreenLocation(mapPoint);

CameraPosition newPosition = new CameraPosition(position)
                                  .target(mapTarget)
                                  .zoom(originalZoom+dz)
                                  .build();

map.moveCamera(CameraUpdateFactory.newCameraPosition(newPosition));

10-08 02:53