当前位置: 首页 > 知识库问答 >
问题:

检查地图上的标记是否已删除-Android[重复]

宰父熙云
2023-03-14
override fun onMapReady(googleMap: GoogleMap) {
    this.googleMap = googleMap

    val markerOptions = MarkerOptions()
    markerOptions.position(LatLng(31.520959,74.352154))
  markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.curr_loc_grey))
    val marker = googleMap.addMarker(markerOptions)
   /........../
    marker.remove()
}

api'com.google.maps:google-maps-services:0.10.2'

当我调试时,我看到标记。isvisible添加时为true,并且在remove()之后为true。是虫子吗?

共有1个答案

白浩气
2023-03-14

无论如何,您可以在将标记添加到map的同时将其添加到HashSet中:

...
HashSet<Makrer> markersOnMap = new HashSet<>();
...

...
// when add marker to map
Marker marker = googleMap.addMarker(markerOptions);
markersOnMap.add(marker);
...

...
// when remove
markersOnMap.remove(marker);
marker.remove();
...

...
// when check is marker on map
if (markersOnMap.contains(marker)) {
    // marker is on map   
} else {
    // marker removed   
}

当然,这只是方法描述,而不是最终代码。

更新:

public class MarkesrMapView extends MapView implements OnMapReadyCallback {

    private OnMapReadyCallback mMapReadyCallback;
    private GoogleMap mGoogleMap;
    private HashSet<Makrer> mMarkersOnMap;

    public MarkersMapView(@NonNull Context context) {
        super(context);
        init();
    }

    public MarkersMapView(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MarkersMapView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    public MarkersMapView(@NonNull Context context, @Nullable GoogleMapOptions options) {
        super(context, options);
        init();
    }

    private void init() {
        mMarkersOnMap = new HashSet<>();
    }

    @Override
    public void getMapAsync(OnMapReadyCallback callback) {
        mMapReadyCallback = callback;
        super.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mGoogleMap = googleMap;
        if (mMapReadyCallback != null) {
            mMapReadyCallback.onMapReady(googleMap);
        }
    }

    public Marker addMarker(MarkerOptions markerOptions) {
        Marker marker = mGoogleMap.addMarker(markerOptions);
        mMarkersOnMap.add(marker);
        return marker;
    }

    public void removeMarker(Marker marker) {
        if (marker == null) return;
        mMarkersOnMap.remove(marker);
        marker.remove();
    }

    public boolean isOnMap(Marker marker) {
        if (marker == null) return false;
        return mMarkersOnMap.contains(marker);
    }
}
...
private markersMapView mMapView;
...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Bundle mapViewBundle = null;
    if (savedInstanceState != null) {
        mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
    }

    mMapView = (MarkersMapView) findViewById(R.id.mapview);
    mMapView.onCreate(mapViewBundle);
    mMapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            mGoogleMap = googleMap;
            mMapView.addMarker(new MarkerOptions().position(...).title("Marker"));
        }
    });

   ...
   if (mMapView.isOnMap(myMarker)) {
      ...
   }
 类似资料:
  • 试图制作一个小的Android应用程序,以谷歌地图标记的形式显示人们的位置。 当用户按下按钮出现在地图上时,应用程序会从Firebase JSON中检索用户数据并在地图上实时显示用户。如果用户移动,标记会随着他一起移动(当他的位置发生变化时删除并重新创建)。 一切都很好,除了当用户按下离开地图时,他的标记会保留在所有其他手机中,即使它已从Firebase JSON中删除。 有人能解释一下如何解决这

  • 我已经尝试在这里和谷歌地图API留档上查看了大量的代码块,但仍然无法找出如何隐藏标记。 这是我正在使用的当前代码,它在一个实例中有效。有一次,我在带有标记的函数中添加了“for”循环。setMap(null)Firefox显示以下错误: markers.set地图不是一个函数 附加信息:校园地图和完整代码(不包括地图API)

  • 我想删除一个本地图像标记(“存储库”/“标记”组合)。有可能吗? 我如何才能在仅与一个图像ID相关联的多个标记中删除任何一个标记而不删除其他标记?在我的情况下,我只想排除hiworld存储库。我可以删除图像,因此也可以删除与之相关联的所有标签,但这不是我想要做的。下面是输入命令docker images时显示的内容。 提前道谢。

  • 任何努力都将受到赞赏。

  • 这些是输入数据("test.data")的几个留置权: 我使用此代码绘制甘特图: 输出如下所示: 我想知道,我怎样才能从绿色矩形的两侧去掉那些白点?或者至少改变他们的颜色?