【问题标题】:Hide and show markers on MapBox在 MapBox 上隐藏和显示标记
【发布时间】:2017-06-28 09:07:42
【问题描述】:

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

在 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。

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 2019-06-04
      • 2015-01-27
      • 2012-11-08
      相关资源
      最近更新 更多