我想同时缩放和滚动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));