マーカーの情報を保持するクラスを実装する.
package com.moonlight_aska.android.web.googlemap02;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.OverlayItem;
public class MarkerItem extends OverlayItem {
public MarkerItem(GeoPoint point, String arg1, String arg2) {
super(point, arg1, arg2);
// TODO Auto-generated constructor stub
}
}
オーバーレイ表示を行うクラスを実装する.
- ItemizedOverlayクラスを継承する.
- コンストラクタ
- ItemizedOverlay#boundCenterメソッドで, マーカーの(0,0)を中央に指定する.
- createItemメソッドで, 指定した座標位置にマーカーを生成する.
- sizeメソッドで, マーカーを表示する座標位置数を返す.
- addMakerメソッドで, マーカーを表示する座標位置を追加する.
package com.moonlight_aska.android.web.googlemap02;
import java.util.ArrayList;
import java.util.List;
import android.graphics.drawable.Drawable;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
public class MarkerOverlay extends ItemizedOverlay<MarkerItem> {
private List<GeoPoint> mPoints = new ArrayList<GeoPoint>();
public MarkerOverlay(Drawable defaultMarker) {
super(boundCenter(defaultMarker));
// TODO Auto-generated constructor stub
}
@Override
protected MarkerItem createItem(int i) {
// TODO Auto-generated method stub
GeoPoint point = mPoints.get(i);
return new MarkerItem(point, "", "");
}
@Override
public int size() {
// TODO Auto-generated method stub
return mPoints.size();
}
public void addMarker(GeoPoint point) {
mPoints.add(point);
populate();
}
}
Googleマップにマーカー用のオーバーレイを重ねて表示するには, MapViewにオーバーレイを追加する.
- Drawableのインスタンスを取得する.
- MarkerOverlayのインスタンスを生成する.
- MapView#getOverlays#addメソッドで, オーバーレイを追加する.
- MarkerOverlay#addMarkerで, マーカー位置を設定する.
package com.moonlight_aska.android.web.googlemap02;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
public class MainActivity extends MapActivity {
// 六甲山:北緯34度46分41秒, 東経135度15分49秒
private int mLatitude = (int)( (34.0d + 46.0d/60 + 41.0d/(60*60) ) * 1E6);
private int mLongitude = (int)( (135.0d + 15.0d/60 + 49.0d/(60*60) ) * 1E6);
MarkerOverlay mOverlay;
MapView mView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mView = (MapView)findViewById(R.id.mapview);
GeoPoint geoPo = new GeoPoint(mLatitude, mLongitude);
mView.getController().animateTo(geoPo);
// オーバーレイ表示
Drawable marker = getResources().getDrawable(R.drawable.marker);
mOverlay = new MarkerOverlay(marker);
mView.getOverlays().add(mOverlay);
// マーカー設定
mOverlay.addMarker(geoPo);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
SHARP SH03C / Android 2.2