在 MapBox 上隐藏和显示标记
Hide and show markers on MapBox
当我开始这个的时候,我认为这是一个相当微不足道的功能,但我一直在努力实现它:
在 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
。
我认为只有使用 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);
当我开始这个的时候,我认为这是一个相当微不足道的功能,但我一直在努力实现它:
在 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
。
我认为只有使用 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);