摘自mars chen 老师的视频第三季 07季
首先我们要明白Overlay的作用:
1.一个overlay对象表示显示在MapView之上的图层 2 在一个overlay对象中可以包含多个地图标记
详情见:http://code.google.com/android/add-ons/google-apis/reference/index.html
其次:要明白ItemizedOverlay的作用:
1.它是overlay的子类 2在该类当中拥有一个或多个OverlayItem 3每个OverlayItem 代表一个标记
详见:http://code.google.com/android/add-ons/google-apis/reference/index.html
在地图中使用标记的步骤:
1.在MapView上创建一个单独的图层
2 创建标记对象
3 将标记显示在指定图层的指定位置
4.处理点击标记事件
代码解析:
1.创建类,实现overlay即public class FirstOverlay extends ItemizedOverlay<OverlayItem>{}
2.创建一个list,用于持有该图层当中所有的标记对象
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
3 创建OverlayItem标记对象
protected OverlayItem createItem(int i) { return mOverlays.get(i); }
4 将生成OverlayItem对象添加到list中
public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); }
5 override the size()
method to return the current number of items in the ArrayList
@Override public int size() { return mOverlays.size(); }
6 添加构造方法
//defaultMarker 指定标记所使用的默认图片 public FirstOverlay(Drawable defaultMarker, Context context) { //必须调用父类的构造函数 super(boundCenterBottom(defaultMarker)); mContext = context; }
7 当用户点击时执行(override the onTap(int)
callback method, which will handle the event when an item is tapped by the user)
@Override protected boolean onTap(int index) { OverlayItem item = mOverlays.get(index); AlertDialog.Builder dialog = new AlertDialog.Builder(mContext); dialog.setTitle(item.getTitle()); dialog.setMessage(item.getSnippet()); dialog.show(); return true; }
之后在MainActivity extends MapAcitivity中调用FirstOverlay 来使用标记
8 在onCreate() 中添加如下代码:前提是(在res/drawable下添加一个小图片命名为androidmarker.png或androidmarker.jpg)
//mapView.getOverlays()用于得到所有图层对象 List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker); FirstOverlay firstOverlay = new FirstOverlay(drawable,this);
9 接着添加
//GeoPoint用于通过经纬度指定地图上的一个点 GeoPoint point = new GeoPoint(19240000, -99120000); OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!","I'm in Mexico City!");
10 添加
firstOverlay.addOverlay(overlayitem); mapOverlays.add(firstOverlay);
所对应得main.xml文件为
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <com.google.android.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" android:apiKey="*****" /> </RelativeLayout>
之后就运行你的项目吧 嘿嘿 效果如下:
最最原始的代码请见:http://developer.android.com/resources/tutorials/views/hello-mapview.html的
Part 2: Adding Overlay Items