我有一个UI,它有一个MapFragment,透明视图覆盖在它上面.地图占据整个屏幕,而视图只占屏幕的左三分之一.结果,地图的默认"中心"关闭.当有人点击标记时,我想将该标记居中在MapFragment的整个可见区域(而不是MapFragment本身的中心).
由于这很难用文字描述,让我用几张图片.假设这是我的UI看起来的样子:

当用户点击一个标记时,我想要将它居中并放大以便更接近它.没有任何调整,这是你会得到的:

我想要的是标记居中,但在右边的空间,如下所示:

如果您不使用地图投影更改缩放级别,则很容易实现此专长:
// Offset the target latitude/longitude by preset x/y ints
LatLng target = new LatLng(latitude, longitude);
Projection projection = getMap().getProjection();
Point screenLocation = projection.toScreenLocation(target);
screenLocation.x += offsetX;
screenLocation.y += offsetY;
LatLng offsetTarget = projection.fromScreenLocation(screenLocation);
// Animate to the calculated lat/lng
getMap().animateCamera(CameraUpdateFactory.newLatLng(offsetTarget));
Run Code Online (Sandbox Code Playgroud)
但是,如果您同时更改缩放级别,则上述计算不起作用(因为lat/lng偏移在不同的缩放级别发生变化).
让我来看一下尝试修复的列表:
快速更改缩放级别,进行计算,缩放回原始摄像机位置,然后设置动画.不幸的是,突然的相机改变(即使它只是一瞬间)很遗憾非常明显,我想避免闪烁.
将两个MapFragments叠加在一起,让一个执行计算,而另一个显示.我发现MapFragments并不是真正构建成彼此叠加的(这条路线上有不可避免的错误).
通过缩放级别平方的差异修改屏幕位置的x/y.从理论上讲,它应该可以工作,但它总是相当长一段时间(〜.1纬度/经度,足够远离它).
有没有办法计算offsetTarget即使缩放级别改变?
任何人都可以帮助我获得中心点.我有6个LatLng对象,现在我需要让LatLng对象居中.非常感谢!
我希望我的应用程序中的谷歌地图始终完全以用户为中心,并随着当前位置的变化而随之移动.(想想口袋妖怪去,地图实际上如何与用户一起移动)
我目前的最佳实现只是每次更改位置时都会使用动画更新摄像机位置,如下所示:
// update the location of the camera based on the new latlng, but keep the zoom, tilt and bearing the same
CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(new CameraPosition(latLng,
googleMap.getCameraPosition().zoom, MAX_TILT, googleMap.getCameraPosition().bearing));
googleMap.animateCamera(cameraUpdate);
googleMap.setLatLngBoundsForCameraTarget(toBounds(latLng, 300));
Run Code Online (Sandbox Code Playgroud)
然而,这使得相机运动有些不稳定并且它落后于实际的用户位置标记,特别是如果用户快速移动.
有没有办法绑定谷歌地图相机的运动,以便它完全匹配用户的运动?