【问题标题】:Android Google Map V2: How to change previous clicked marker's icon when clicked on another markerAndroid Google Map V2:单击另一个标记时如何更改以前单击的标记的图标
【发布时间】:2014-11-29 09:28:28
【问题描述】:

更新:我通过添加 previousMarker 对象解决了性能问题。因此,只有先前单击的标记将被删除并替换为默认图标。但是,当我单击标记时,仍然没有显示信息窗口。


我有一个地图视图并在上面设置了一些标记。我想要的是当我点击一个标记时,它的图标会变成一个不同的图标,当我点击另一个标记时,前一个标记的图标应该会变成原来的。

我所做的就是这样,但它只是在我单击标记时更改标记图标。

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.

    LatLng markerPos=marker.getPosition();
    String markerLocationName=marker.getTitle();
    String markerSubCategoryName=marker.getSnippet();

    marker.remove();

    MarkerOptions markerOptions =
            new MarkerOptions().position(markerPos)
                    .title(markerLocationName)
                    .snippet(markerSubCategoryName)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon
    mMap.addMarker(markerOptions);
    Log.d("marker","change marker icon"); // can open a dialog window here
    return false;
}

所以如果我点击 2 个标记,我会出现 2 个新图标,同时我想要的只是当前点击的标记改变它的图标。

所以我也做了类似的事情,增加了 2 行代码。它成功地做了我想做的事,但它有一些缺点(见下文)。

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.

    mMap.clear();
    populateAllMarkersOnMap();//repopulate markers on map

    LatLng markerPos=marker.getPosition();
    String markerLocationName=marker.getTitle();
    String markerSubCategoryName=marker.getSnippet();

    marker.remove(); //remove the current clicked marker

    MarkerOptions markerOptions =
            new MarkerOptions().position(markerPos)
                    .title(markerLocationName)
                    .snippet(markerSubCategoryName)
                    .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon
    mMap.addMarker(markerOptions); //add marker with new icon into map
    return false;
}

缺点是 1/ 它“禁用”了信息窗口(同样的事情也发生在第一种方式中)。 2/它清除地图上的所有标记并重新设置所有标记。想象一下,我有 100 个标记,这应该是我每次点击的性能问题吗?

populateAllMarkersOnMap() 目前可以像这样简单:

private void populateAllMarkersOnMap(){
    setMarker(latA1, lonA1, "A1","A1.1"); 
    setMarker(latA2, lonA2, "A2","A2.1"); 
    // ... (100 times or populated via a loop) 
};

那么当我点击一个新的标记时,有没有办法让之前点击的标记将其图标更改回默认值?为我的英语道歉,如果你认为我应该为我的问题换个标题,请帮忙。

【问题讨论】:

  • 你以previousMarker Marker为初始阶段是什么?

标签: android google-maps


【解决方案1】:

最后我找到了最好最简单的方法。我制作了一个 previousMarker 对象并存储当前点击的标记:

@Override
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
    if(previousMarker!=null){
        previousMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.dot_icon));
    }
    marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ct_icon));
    previousMarker=marker; //Now the clicked marker becomes previousMarker
    return false;
}

【讨论】:

  • 我写了一些代码,终于可以这样工作了,但是出去再回到页面就出问题了。我不知道我的代码有什么问题
  • 如果你使用集群,它会改变一个带有标记图像的集群圆圈。
【解决方案2】:

您可能正在寻找这种方法

Called when the marker's info window is closed.
optional public func mapView(mapView: GMSMapView, didCloseInfoWindowOfMarker marker: GMSMarker)

【讨论】:

    【解决方案3】:

    我找到了最好最简单的方法。我制作了另一个标记对象并在此处存储当前单击的标记输入代码

    @Override
    public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped.
        if(previousMarker!=null){
            marker2.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.dot_icon));
        }
        marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ct_icon));
        marker2=marker; //Now the clicked marker becomes previousMarker
        return false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 2015-10-16
      • 2013-05-11
      • 2011-11-02
      • 2013-05-16
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多