1

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

在 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 在哪里。这些方法做他们应该做的事情。markerMap保留引用,并将它们正确添加到地图中。但是,它们没有显示。

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

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

4

1 回答 1

1

我认为只有使用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);
于 2017-07-04T09:57:14.223 回答