当我开始这个时,我认为这是一个相当微不足道的功能,但我一直在努力实现这一目标:
在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
。
答案 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);