通常情况光有地图还是不够的,如何添加一个自定义的图层,譬如说把一个热点,一个基站地址标注在地图上。如下步骤帮你完成Android Google Map 自定义图层的添加
创建一个 ItemizedOverlay 类
添加一个新的构造函数:
public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
this(defaultMarker);
this.mContext = context;
}
重写 onTap(int) 函数, 用来响应的用户的触摸:
@Override
protected boolean onTap(int index) {
OverlayItem item =mOverlays.get(index);
AlertDialog.Builder dialog = newAlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
HelloItemizedOverlay类完成了.
打开HelloGoogleMaps 类.下面将新建 OverlayItem 并加到HelloItemizedOverlay 实例中, 并将HelloItemizedOverlay图层加到MapView.
HelloItemizedOverlay itemizedoverlay = newHelloItemizedOverlay(drawable,this);
GeoPointpoint3 = new GeoPoint(29578290,121613174);
OverlayItem overlayitem3 = newOverlayItem(point3, "Hello3!","I'm in Chunhu3!");
itemizedoverlay.addOverlay(overlayitem3);
mymapController.setZoom(9); //设置地图放大层级
详细代码:
HelloGoogleMaps.java文件:
package com.google.maps.HelloGoogleMaps; import java.util.List; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import com.google.android.maps.*; public class HelloGoogleMaps extends MapActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MapView mapView = (MapView)findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); mapView.setEnabled(true); MapController mymapController = mapView.getController(); Double lng = 121.512974 * 1E6; Double lat = 29.578181 * 1E6; GeoPoint point = new GeoPoint( lat.intValue(),lng.intValue()); mymapController.setCenter(point);//显示中心 mymapController.setZoom(9); //放大层级 // mapView.setSatellite(true); //是否为卫星模式 List<Overlay> mapOverlays = mapView.getOverlays(); Drawable drawable = this.getResources().getDrawable(R.drawable.w9mt3knd); HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable,this); GeoPoint point2 = new GeoPoint(29578181,121512974); OverlayItem overlayitem2 = new OverlayItem(point2, "Hello!", "I'm in Chunhu!"); GeoPoint point3 = new GeoPoint(29578290,121613174); OverlayItem overlayitem3 = new OverlayItem(point3, "Hello2!", "I'm in Chunhu2!"); itemizedoverlay.addOverlay(overlayitem2); itemizedoverlay.addOverlay(overlayitem3); mapOverlays.add(itemizedoverlay); } @Override protected boolean isRouteDisplayed() { return false; } }
H e lloItemizedOverlay.java文件
package com.google.maps.HelloGoogleMaps; import java.util.ArrayList; import android.app.AlertDialog; import android.content.Context; import android.graphics.drawable.Drawable; import com.google.android.maps.ItemizedOverlay; import com.google.android.maps.OverlayItem; public class HelloItemizedOverlay extends ItemizedOverlay { private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); private Context mContext; public HelloItemizedOverlay(Drawable defaultMarker) { //super(defaultMarker); super(boundCenterBottom(defaultMarker)); // TODO Auto-generated constructor stub } public void addOverlay(OverlayItem overlay) { mOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { // TODO Auto-generated method stub return mOverlays.get(i); } @Override public int size() { // TODO Auto-generated method stub return mOverlays.size(); } public HelloItemizedOverlay(Drawable defaultMarker, Context context) { //super(defaultMarker); this(defaultMarker); //mContext = context; this.mContext = context; } @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; } }
转载本站文章请注明,转载自:ADASiteMap的空间[http://www.adasitemap.tk]
本文链接:Android Google Map实例 – 添加Google Map自定义图层(Android mapview) | ADASiteMap的空间