在MapBox上隐藏和显示标记

时间:2017-06-28 09:07:43

标签: android maps mapbox mapbox-marker mapbox-android

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

在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

1 个答案:

答案 0 :(得分: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);