我无法找到这个解决方案,或找到任何表明它甚至可能的结果。希望有人能指出我正确的方向。
我已将谷歌地图v2设置为放大到用户位置的第15级。在初始加载地图时使用CameraPosition
很容易。我还通过AsyncTask
加载了标记。
如果地图在放大用户位置时没有显示任何标记,是否可以将地图缩放到最近的标记。
实际上,地图会加载,缩放到用户蓝点。如果显示标记,则没有任何反应。如果屏幕上没有标记,那么我可以缩放到最近的标记。或者只是缩小到高级别并告诉用户他们的位置没有。虽然我更喜欢移动到最近的标记;缩小到更高的水平也会让我满意。
也许在通过Async加载标记后,我可以动画相机移动,如果需要的话?我真的不知道如何检查屏幕上是否有标记。
有办法吗?我真的很感激任何帮助。谢谢。
答案 0 :(得分:1)
让我们从确定屏幕上是否有任何可见标记的问题开始。您可以使用this StackOverflow answer中详述的方法执行此操作。
一旦确定您显示的任何标记是否可见,您将需要确定哪个点最接近用户(如果没有可见的话)。这应该是相当简单的,因为你应该拥有每个点的所有LatLng并且你拥有用户的LatLng。然后缩小以显示您的点。这可以与下面的代码片段类似地完成(仅当您尝试在onCreate或类似的生命周期方法中执行此操作时,才需要onGlobalLayoutListener。如果您确定这将在映射完成后发生,然后不要担心听众)
if (mapView.getViewTreeObserver().isAlive()) {
mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
mapView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
if (noVisibleMarkers) {
mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(llbuilder.build(), 100));
}
}
});
}
如果mapView是MapView,则mMap是GoogleMap,而llbuilder是一个LatLngBounds.Builder,其中包含您的用户位置以及您希望包含在地图可见部分中的点。