代码之家  ›  专栏  ›  技术社区  ›  Terry

在地图框上隐藏和显示标记

  •  1
  • Terry  · 技术社区  · 7 年前

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

    我找不到任何选项来隐藏(将可见性设置为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 是一个哈希映射,我在其中保存点引用。 markerMap公司 保留引用,并将其正确添加到地图中。

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

    com.mapbox.mapboxsdk:mapbox-android-sdk:5.0.2@aar .

    1 回复  |  直到 7 年前
        1
  •  1
  •   Olsi Saqe    7 年前

    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);