package com.android_mvc.framework.ui.view.map;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.android_mvc.framework.ui.UIUtil;
import com.google.android.maps.ItemizedOverlay;
/**
* マップ上に独自アイコンを表示するためのオーバレイ。
* @author id:language_and_engineering
*
*/
public class IconsOverlayImpl extends ItemizedOverlay<BaseOverlayItem>
{
// 描画中のアイコンの配列。複数スレッドからアクセスされ得るので注意。
private List<BaseOverlayItem> overlay_items = new ArrayList<BaseOverlayItem>();
private MMapView map;
private Context context;
/* --------- 基本 -------- */
public IconsOverlayImpl(Drawable defaultMarker, MMapView mMapView)
{
super(boundCenterBottom(defaultMarker));
this.map = mMapView;
populate();
// コンストラクタ内でpopulate() しないと,NullPointerExceptionになるので。
// http://developmentality.wordpress.com/2009/10/19/android-itemizedoverlay-arrayindexoutofboundsexception-nullpointerexception-workarounds/
// populate()がない場合,ユーザ画面からホーム画面に戻って最初の数秒の
// まだGPS情報が取得されるよりも前の時点でタップすると落ちた。
}
@Override
protected BaseOverlayItem createItem(int i) {
return overlay_items.get(i);
}
@Override
public int size() {
return overlay_items.size();
}
/**
* アイコン表示対象のリストを追加
*/
public void setIconsList(List<BaseOverlayItem> overlayItemsList) {
this.overlay_items = overlayItemsList;
populate();
}
/**
* Contextを追加
*/
public void addContext(Context context)
{
this.context = context;
}
/* --------- アイコンの描画 -------- */
/**
* マップ上にアイコンを再描画
*/
protected void redrawMapIcons()
{
// マップUIを強制的に再描画
map.postInvalidate();
}
/* --------- イベント -------- */
// アイコンをタップ時
@Override
protected boolean onTap(int index) {
BaseOverlayItem oi = overlay_items.get(index);
UIUtil.longToast(context, oi.getSnippet());
return true;
}
}