我想同时缩放和滚动 GoogleMap
对象。不幸的是,如果我只是进行两次 moveCamera
调用(一个接一个),似乎只有第二次调用会生效。
另一种方法是传递 CameraPosition
,但不幸的是,CameraPosition
构造函数似乎没有采用处理滚动量的参数(这是缩放级别不变),但只是关于去往哪个纬度/经度的参数。
是否有一些聪明的方法来组合/连接 CameraUpdate
对象,这样我就可以发出一个同时执行平移和缩放的 moveCamera
命令?
我认为这样的事情是可能的,因为您可以在触摸 map 时做到这一点。您放下两根手指,张开手指可以放大/缩小,同时移动两根手指可以平移。
最佳答案
看起来您最好的选择是修改调用 GoogleMap.getCameraPosition()
时返回的 CameraPosition
对象。但是,您不能仅将 CameraPosition
对象的纬度和经度增加滚动的像素数。您必须获取 CameraPosition
的 LatLng 坐标,使用 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));
关于java - 安卓谷歌地图 : Combine scrollBy with zoomBy for simultaneous pan & zoom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912182/