2017-04-21 15 views
1

状況1: は、私のような青色のマーカーでマップを移入言う:アンドロイドで地図上のすべてのマーカーの色を同時に変更するにはどうすればよいですか?一部のマーカーの色のみを変更するにはどうすればよいですか?

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

マーカーをクリックすると、私は黄色にマップ上のすべてのマーカーの色を変更したいです。どうすればいい?

現在、私は、私はこの方法を使用してをクリックして、特定のマーカーの色を変更するために管理することができます。

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


    return false; 
} 

 

状況2: 私はマーカーの2種類があると、青と赤、latLngの2つの異なるリストから作成されます。 マーカーをクリックすると

//create blue markers 
for (LatLng latLng : latLngListBlue) { 
    mMap.addMarker(new MarkerOptions() 
       .position(latLng) 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE))); 
} 

//create red markers 
for (LatLng latLng : latLngListRed) { 
    mMap.addMarker(new MarkerOptions() 
       .position(latLng) 
       .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
} 

は、私はすべてのマーカーが黄色に変更したいです。どうすればいい?

答えて

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); 
} 

、その後、第2の状況

+0

ありがとうございました!これは私のために働いた。 また、私はリストによってあなたが意味するmMarkersを意味しますリスト mMarkers。 – thegreenchipmunk

+0

お手伝いしてうれしい!あなたの前提はリストタイプに関するものなのですが、今修正されました。 – pablobu

0

ため

@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; 
} 

同様の問題を回避するには、あなたは色の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を作成し、リストに保存します:あなたは、このようなマーカーでPOJOとIDを持つリストを使用することができます

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)); 
} 

あなたがすることもできますcolorIdにはの代わりにEnumを使用してください。また、POJOの代わりにPairを使用することもできます。

関連する問題