如何在android中同时更改地图上所有标记的颜色?我如何只更改某些标记的颜色?

时间:2017-04-21 18:51:00

标签: java android google-maps-markers marker

情况1: 假设我用蓝色标记填充地图:

1234

点击标记时,我希望将地图上每个标记的颜色更改为黄色。我该怎么做?

目前,我只能设法更改我使用此方法点击的特定标记的颜色:

gets()

情况2: 假设我有两种标记,蓝色和红色,由两个不同的latLng列表创建。

for (LatLng latLng : latLngList) {
  mMap.addMarker(new MarkerOptions()
                .position(latLng)
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
}

点击红色标记后,我希望所有蓝色标记变为黄色。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要保留对标记的引用,然后在需要时进行修改。

List<Marker> mMarkers = new Arraylist<Marker>();

for (LatLng latLng : latLngList) {
        Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(latLng)
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
        mMarkers.add(marker);
}

然后

@Override
public boolean onMarkerClick(Marker marker) {
    //change marker colour to yellow
    marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
    for(Marker otherMarker : mMarkers) {
        otherMarker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
    }

    return false;
}

第二种情况的类似解决方法

答案 1 :(得分:0)

您可以通过为所有具有颜色ID的标记保存列表来实现此目的。你可以使用带有标记的POJO列表和这样的ID:

public class MarkerWithColor {
  private Marker marker;
  private int colorId; // red = 0, green = 1, blue = 2

  public MarkerWithColor(Marker marker, int colorId) {
    this.marker = marker;
    this.colorId = colorId;
  }
  // getter
  // setter 
} 

然后,每次添加标记时,创建pojo并保存到列表中:

List<MarkerWithColor> markerWithColors = new ArrayList<>();

// adding blue marker
for (LatLng latLng : latLngList) {
  Marker marker = mMap.addMarker(new MarkerOptions()
            .position(latLng)
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
  // add to the list
  markerWithColors.add(new MarkerWithColor(marker, 2)); // 2 is blue color
}

/* Do the same for the red and green */

// Now you can change the specific color
// Change blue to yellow
for(int i = 0; i < markerWithColors.size(); i++) {
  MarkerWithColor markerWithColor = markerWithColors.get(i);
  markerWithColor.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));
}

您还可以使用枚举代替 int 作为colorId。您也可以使用Pair代替POJO。