在 MapBox 上隐藏和显示标记

Hide and show markers on MapBox

当我开始这个的时候,我认为这是一个相当微不足道的功能,但我一直在努力实现它:

在 Android 上的 MapBox 地图上,我想在缩小时隐藏所有标记(在某个缩放级别),并在放大时再次显示它们。

我找不到任何选项来隐藏(将可见性设置为 false)标记。所以我删除它们并再次添加它们:

private void hideMarkers() {
    if (!markersHidden) {
        mapBoxMap.clear();
        markersHidden = true;
    }
}

private void showMarkers() {
    if (markersHidden) {
        markersHidden = false;
        for (Point point : markerMap.values()) {
            addMapMarker(point);
        }
    }
}

public void addMapMarker(Point point) {
    if (point == null) return;

    markerMap.put(point.id, point);
    if (markersHidden) return;

    MarkerOptions markerOptions = new MarkerOptions()
            .position(new LatLng(point.location.latitude, point.location.longitude))
            .setSnippet(point.id)
            .icon(IconUtils.drawableToIcon(getContext(), presenter.getMapIcon(point.provider).getMapIcon(point)))
            .title(point.name);

    mapBoxMap.addMarker(markerOptions);
}

其中 markerMap 是一个 HashMap,我在其中保存我的 Point 引用。 这些方法做它们应该做的事情。 markerMap 保留引用,并将它们正确添加到地图中。 但是,它们没有显示。

为什么添加到地图后没有显示在地图上?
我该怎么做才能再次显示标记?
除了删除和添加标记之外,还有其他方法可以隐藏和显示标记吗?

我使用的 MapBox 版本是com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.2@aar

我认为只有使用 MarkerView 才能设法隐藏和显示标记。作为概念教授,这里有一段代码展示了它如何通过 setVisibility

方法工作
markerView = map.addMarker(new MarkerViewOptions()
                    .anchor(.5f, .5f)
                    .icon(IconFactory.getInstance(getApplicationContext()).fromResource(R.drawable.mapbox_marker_icon_default))
                    .position(stuttgartLoc));

            CameraUpdate cameraNewPosition = CameraUpdateFactory
                    .newLatLngZoom(stuttgartLoc, 17);
            map.animateCamera(cameraNewPosition);

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    markerView.setVisible(false);
                }
            }, 5000);

            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    markerView.setVisible(true);
                }
            }, 10000);