在地图上添加标记,主要类有
com.google.android.maps.Overlay
com.google.android.maps.ItemizedOverlay<Item>
地图可以分为多个图层,可以继承Overlay或者其子类,绘制自己想要的结果。
1. 配置布局文件
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true" android:apiKey="xxxxxxxxxxxxxxxxx”
/>
apiKey的申请参考上一篇
2. 重写Overlay或者其子类
1. extends Overlay
public class MarkMap1extends Overlay
{
private GeoPoint geoPoint =null;
private Bitmap bitMap =null;
public MarkMap1()
{
super();
}
public MarkMap1(GeoPoint geoPoint,Bitmap bitMap)
{
super();
this.geoPoint = geoPoint;
this.bitMap = bitMap;
}
@Override
public void draw(Canvas canvas, MapView mapView,boolean shadow)
{
super.draw(canvas, mapView, shadow);
if (!shadow)
{
Projection promapView.getProjection();
if (geoPoint !=null && bitMap !=null)
{
Point poi = pro.toPixels(geoPoint,null);
canvas.drawBitmap(bitMap, poi.x, poi.y,null);
}
}
}
@Override
public boolean onTap(GeoPoint p, MapView mapView)
{
Toast.makeText(mapView.getContext(), "测试点击", Toast.LENGTH_SHORT).show();
return super.onTap(p, mapView);
}
extends ItemizedOverlay<OverlayItem>
public class MarkMapextends ItemizedOverlay<OverlayItem>
{
private ArrayList<OverlayItem> mOverlays =new ArrayList<OverlayItem>();
private Context mContext =null;
public MarkMap(Drawable defaultMarker)
{
super(boundCenterBottom(defaultMarker));
}
public MarkMap(Drawable defaultMarker, Context context)
{
super(boundCenterBottom(defaultMarker));
this.mContext = context;
}
@Override
protected OverlayItem createItem(int i)
{
return mOverlays.get(i);
}
@Override
public int size()
{
return mOverlays.size();
}
public void addOverlay(OverlayItem overlay)
{
mOverlays.add(overlay);
populate();
}
protected boolean onTap(int index)
{
OverlayItem item = mOverlays.get(index);
AlertDialog.Builderdialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
}
3. Activity extends MapActivity
/*
* 在地图上添加标记
*
* */
public class Map2Activityextends MapActivity
{
private MapView mapView =null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bitmap bitmap = BitmapFactory
.decodeResource(getResources(), R.drawable.police);
mapView = (MapView) findViewById(R.id.mapView);
/*
//extends Overlay
mapView.setBuiltInZoomControls(true);
GeoPoint point = new GeoPoint((int) (39.95 * 1000000),
(int) (116.37 * 1000000));
MarkMap1 mm = new MarkMap1(point, bitmap);
mapView.getOverlays().add(mm);
*/
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.ic_launcher);
MarkMap itemizedoverlay = new MarkMap(drawable, this);
GeoPoint point1 = new GeoPoint((int) (39.95 * 1000000),
(int) (116.37 * 1000000));
GeoPoint point2 = new GeoPoint((int) (39.95 * 1000000),
(int) (118.37 * 1000000));
GeoPoint point3 = new GeoPoint((int) (39.95 * 1000000),
(int) (120.37 * 1000000));
OverlayItem overlayitem1 =new OverlayItem(point1,"地址","这是北京偶");
OverlayItem overlayitem2 =new OverlayItem(point2,"地址","这是北京偶");
OverlayItem overlayitem3 =new OverlayItem(point3,"地址","这是北京偶");
itemizedoverlay.addOverlay(overlayitem1);
itemizedoverlay.addOverlay(overlayitem2);
itemizedoverlay.addOverlay(overlayitem3);
mapOverlays.add(itemizedoverlay);
mapView.getController().setZoom(8);
//将地图移动到 Overlay层标记的几个对象的第一个标记点(不是中心点)
mapView.getController().setCenter(itemizedoverlay.getCenter());
}
@Override
protected boolean isRouteDisplayed()
{
return false;
}
}
4. AndroidManifest.xml
添加对应的权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permissionandroid:name="android.permission.INTERNET"/>
将uses-library 加入到application
<uses-library android:name="com.google.android.maps" />
运行成功后,会在地图上看到三个标记,点击会触发对应的事件。
在三星I9020上测试通过。
参考网址:http://code.google.com/intl/zh-CN/android/add-ons/google-apis/index.html
http://code.autonavi.com/android/code 高德地图的API,和官网的貌似一样,只不过变成中文了。
http://developer.android.com/resources/tutorials/views/hello-mapview.html 实例中的DEMO原型 ,很多文张直接复制这篇的。
http://developer.android.com/resources/index.html 简单实用的demo