【问题标题】:android add and remove mark without call clear()android添加和删除标记而不调用clear()
【发布时间】:2016-10-11 10:37:32
【问题描述】:

我有一张地图,当相机移动时,它会调用 api 来获取数据并添加新的标记。

例如,我第一次从 api 获得 4 个标记 [a b c d]

在我拖动地图后,我从 api 得到 [b c d e]

我不想调用 map.clear() 然后添加新的,因为这会导致闪烁(所有标记消失并返回)

什么是删除“a”并添加“e”的有效方法 我试图避免使用 for 循环(需要根据它们的 lat/lng 比较所有数据,可能会减慢堆标记)。

我发现有人使用 QuadTree 来实现这一点,但不确定它是如何工作的。

更新:关键是如何找到要删除哪些标记以及要添加哪些标记

有什么想法吗?

【问题讨论】:

    标签: android google-maps marker


    【解决方案1】:

    您可以通过 marker.remove(); 从地图中删除 Marker。例如:

    Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(40, 4)));
    
    // More code
    
    marker.remove();
    

    在您的情况下,您可以使用 HashMap 以给定 ID 维护您的 Markers,然后查询 HashMap 以将它们从地图中删除:

    private Map<String, Marker> markers = new HashMap<>();
    
    //
    
    markers.put("markerName", mMap.addMarker(new MarkerOptions().position(new LatLng(40, 4)))); // Add the marher to the map and to the hashmap
    
    markers.remove("markerName") // Find and remove the marker from the hashmap
           .remove();            // Remove the marker from the map
    

    【讨论】:

    • 但我需要比较 2 个日期集以找到要删除和添加的标记,我正在寻找一种更好的方法来找到它们,而不是在 for 循环中进行
    • 这可能会有所帮助,我可以使用 id 作为键,但我仍然需要迭代来找出需要删除哪个标记,并且 hashMap 对内存很重。
    猜你喜欢
    • 2018-08-19
    • 2015-05-03
    • 2015-08-09
    • 2019-03-07
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-24
    相关资源
    最近更新 更多