如果缩放的区域中没有标记,是否可以缩小地图?

时间:2014-01-22 18:36:33

标签: android google-maps asynchronous google-maps-markers

我无法找到这个解决方案,或找到任何表明它甚至可能的结果。希望有人能指出我正确的方向。

我已将谷歌地图v2设置为放大到用户位置的第15级。在初始加载地图时使用CameraPosition很容易。我还通过AsyncTask加载了标记。

如果地图在放大用户位置时没有显示任何标记,是否可以将地图缩放到最近的标记。

实际上,地图会加载,缩放到用户蓝点。如果显示标记,则没有任何反应。如果屏幕上没有标记,那么我可以缩放到最近的标记。或者只是缩小到高级别并告诉用户他们的位置没有。虽然我更喜欢移动到最近的标记;缩小到更高的水平也会让我满意。

也许在通过Async加载标记后,我可以动画相机移动,如果需要的话?我真的不知道如何检查屏幕上是否有标记。

有办法吗?我真的很感激任何帮助。谢谢。

1 个答案:

答案 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,其中包含您的用户位置以及您希望包含在地图可见部分中的点。