- 2008-10-28 23:23
- android
本エントリは以前の「Androidで地図に画像を配置する方法」をAndroid 1.0へ対応するものです。
Overlayを使って、画像を地図の特定のロケーション(緯度経度)に配置します。
MapへはOverlayを重ねる事ができます。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView map = new MapView(this, "[Android Maps API Key]"); map.setEnabled(true); map.setClickable(true); setContentView(map); // 画像を地図上に配置するオーバーレイ Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon); MyOverlay overlay = new MyOverlay(bmp, new GeoPoint(35656000, 139700000)); List<Overlay> list = map.getOverlays(); list.add(overlay); }
#[Android Maps API Key]に関しては「AndroidでGoogle Mapsを使う最も簡単なサンプル」をご参照下さい。
MyOverlayクラスは画像(Bitmap)を特定のロケーション(GeoPoint)へ配置するOverlayです。
MapViewから取得したOverlay用のリストへ、このMyOverlayオブジェクトを追加する事で、
地図にOverlayを重ねる事ができます。
今回の位置は緯度が35656000で、経度が139700000です。
画像を特定のロケーションへ配置するOverlayを自分で定義します。
ソースコードは以下のようになります。
package com.adamrocker.android.sample.map; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import com.google.android.maps.*; public class MyOverlay extends Overlay { private final Bitmap bmp; private final GeoPoint gpoint; public MyOverlay(Bitmap bmp, GeoPoint gp) { this.bmp = bmp; this.gpoint = gp; } public void draw(Canvas canvas, MapView mapView, boolean shadow) { Projection pro = mapView.getProjection();//Mapと画面の位置を計算するオブジェクト Point p = pro.toPixels(gpoint, null); //ロケーションから、表示する位置を計算する canvas.drawBitmap(bmp, p.x, p.y, null); //表示する場所へ画像を配置する。 } }
このサンプルのスクリーンショットです。

ちゃんと画像が指定のロケーションの位置へ配置されています。
この位置は固定であり、地図をドラッグしても変わりません。

ちゃんとロケーション上に画像が配置されています。
Androidアプリ作成に、このblogを参考にして下さっている方が意外と多いそうです。
コミュニティ活動をしていると、そういう言葉をよく頂きます。
とても嬉しい事で、感謝しています。これからも精進いたします。
また、Androidに興味のある方は情報が集中する日本Androidの会へ是非ご参加下さい。
全ソースコードを公開します。
MapSample.java
package com.adamrocker.android.sample.map; import java.util.List; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import com.google.android.maps.*; public class MapSample extends MapActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MapView map = new MapView(this, "[Android Maps API Key]"); map.setEnabled(true); map.setClickable(true); setContentView(map); // 画像を地図上に配置するオーバーレイ Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon); MyOverlay overlay = new MyOverlay(bmp, new GeoPoint(35656000, 139700000)); List<Overlay> list = map.getOverlays(); list.add(overlay); } @Override protected boolean isRouteDisplayed() { return false; } }
MyOverlay.java
package com.adamrocker.android.sample.map; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Point; import com.google.android.maps.*; public class MyOverlay extends Overlay { private final Bitmap bmp; private final GeoPoint gpoint; public MyOverlay(Bitmap bmp, GeoPoint gp) { this.bmp = bmp; this.gpoint = gp; } public void draw(Canvas canvas, MapView mapView, boolean shadow) { Projection pro = mapView.getProjection();//Mapと画面の位置を計算するオブジェクト Point p = pro.toPixels(gpoint, null); //ロケーションから、表示する位置を計算する canvas.drawBitmap(bmp, p.x, p.y, null); //表示する場所へ画像を配置する。 } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.adamrocker.android.sample.map" android:versionCode="1" android:versionName="1.0.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MapSample" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <uses-library android:name="com.google.android.maps" /> </application> <uses-permission android:name="android.permission.INTERNET" /> </manifest>
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.adamrocker.com/blog/231/android1r1_overlay_on_map.html/trackback/
- Listed below are links to weblogs that reference
- Android Maps上の特定の位置に画像を配置する方法 from throw Life
