- Android
- 2011-12-21
この記事は最終更新日から1年以上経過しています。
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,748 views