- Android
-
2011-12-21
ItemizedOverlayクラスを継承してGoogleMapに複数のポイントを表示する際、アイコンを変えたい場合、レイヤーを別にする必要があります。
同じレイヤーでアイコンを変えたい場合には、アイコン生成時に呼ばれる「createItem」メソッド内で変えるようにするとできるようです。
その際はアイコン用のリストを作り、switch文などで切り替えすると便利です。
public class PinItemizedOverlay extends ItemizedOverlay<OverlayItem> {
private List<GeoPoint> points = new ArrayList<GeoPoint>();
private List<Integer> icontype = new ArrayList<Integer>();
private Context context;
public PinItemizedOverlay(Drawable defaultMarker, Context context) {
super( boundCenterBottom(defaultMarker) );
setLastFocusedIndex(-1);
populate();
this.context = context;
}
@Override
protected OverlayItem createItem(int i) {
Drawable icon = null;
switch(icontype.get(i)) {
case 0:
icon = context.getResources().getDrawable(R.drawable.icon0);
break;
case 1:
icon = context.getResources().getDrawable(R.drawable.icon1);
break;
case 2:
icon = context.getResources().getDrawable(R.drawable.icon2);
break;
default:
icon = context.getResources().getDrawable(R.drawable.icon0);
break;
}
GeoPoint point = points.get(i);
OverlayItem overlayItem = new OverlayItem(point, null, null);
overlayItem.setMarker(boundCenterBottom(icon));
return overlayItem;
}
public void addPin(GeoPoint point, String title, String snippet, int icontype) {
if (getIndexGeoPoint(point) == -1) {
this.points.add(point);
this.icontype.add(icontype);
}
setLastFocusedIndex(-1);
populate();
}
// 位置が一致するか(一致しない場合は -1を返す)
private int getIndexGeoPoint(GeoPoint newPoint) {
int result = -1;
int size = this.points.size();
for (int i = 0; i < size; i++) {
GeoPoint point = this.points.get(i);
if (point.equals(newPoint)) {
result = i;
break;
}
}
return result;
}
}
2,926 views




