我是在谷歌地图上添加多个标记的triyng.这是我的代码部分
public class GoogleMap extends MapView { MapController mc; MapView mapView; GeoPoint p; @Override public void onCreate(Bundle savedInstanceState) { .... double lat = Double.parseDouble(bundle.getString("paramLat")); double lng = Double.parseDouble(bundle.getString("paramLong")); mc = mapView.getController(); p = new GeoPoint( (int) (lat * 1E6),(int) (lng * 1E6)); mc.animateTo(p); mc.setZoom(17); //---Add a location marker--- MapOverlay mapOverlay = new MapOverlay(); List<Overlay> listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); listOfOverlays.add(mapOverlay); mapView.invalidate(); } class MapOverlay extends com.google.android.maps.Overlay { @Override public boolean draw(Canvas canvas,MapView mapView,boolean shadow,long when) { super.draw(canvas,mapView,shadow); //---translate the GeoPoint to screen pixels--- Point screenPts = new Point(); mapView.getProjection().toPixels(p,screenPts); //---add the marker--- Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pushpin); canvas.drawBitmap(bmp,screenPts.x,screenPts.y-50,null); return true; } }
解决方法
我在我的项目中实现了多个标记.这是示例代码;您需要更改的一些内容是标记图像,长度(您希望在for循环中定义的标记数).希望这会有所帮助!!!
public class ShowMapActivity extends MapActivity{ private MapController mapControll; private GeoPoint geoPoint=null; private MapView mapview; private MyItemizedOverlay userPicOverlay; private MyItemizedOverlay nearPicOverlay; private Drawable userPic,atmPic; private OverlayItem nearatms[] = new OverlayItem[50]; public static Context context; @Override protected void onCreate(Bundle icicle) { // TODO Auto-generated method stub super.onCreate(icicle); context = getApplicationContext(); setContentView(R.layout.your layout xml); showMap(); } public void showMap() { // TODO Auto-generated method stub try { geoPoint = new GeoPoint((int)(latitude * 1E6),(int)(longitude * 1E6)); mapview = (MapView)findViewById(R.id.mapview); mapControll= mapview.getController(); mapview.setBuiltInZoomControls(true); mapview.setStreetView(true); mapControll.setZoom(16); mapControll.animateTo(geoPoint); userPic = this.getResources().getDrawable(R.drawable.your pic); userPicOverlay = new MyItemizedOverlay(userPic); OverlayItem overlayItem = new OverlayItem(geoPoint,"I'm Here!!!",null); userPicOverlay.addOverlay(overlayItem); mapview.getOverlays().add(userPicOverlay); atmPic = this.getResources().getDrawable(R.drawable.your pic); nearPicOverlay = new MyItemizedOverlay(atmPic); for (int i = 0; i < define your length here; i++) { nearatms[i] = new OverlayItem(new GeoPoint((int)((latitude) * 1E6)),(int)(longitude) * 1E6)),"Name",null);//just check the brackets i just made change here so.... nearPicOverlay.addOverlay(nearatms[i]); } mapview.getOverlays().add(nearPicOverlay); //Added symbols will be displayed when map is redrawn so force redraw now mapview.postInvalidate(); } catch (Exception e) { e.printStackTrace(); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }
用于放置标记的分项类别
public class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> { private ArrayList<OverlayItem> myOverlays ; public MyItemizedOverlay(Drawable defaultMarker) { super(boundCenterBottom(defaultMarker)); myOverlays = new ArrayList<OverlayItem>(); populate(); } public void addOverlay(OverlayItem overlay){ myOverlays.add(overlay); populate(); } @Override protected OverlayItem createItem(int i) { return myOverlays.get(i); } // Removes overlay item i public void removeItem(int i){ myOverlays.remove(i); populate(); } // Returns present number of items in list @Override public int size() { return myOverlays.size(); } public void addOverlayItem(OverlayItem overlayItem) { myOverlays.add(overlayItem); populate(); } public void addOverlayItem(int lat,int lon,String title) { try { GeoPoint point = new GeoPoint(lat,lon); OverlayItem overlayItem = new OverlayItem(point,title,null); addOverlayItem(overlayItem); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } @Override protected boolean onTap(int index) { // TODO Auto-generated method stub String title = myOverlays.get(index).getTitle(); Toast.makeText(ShowMapActivity.context,Toast.LENGTH_LONG).show(); return super.onTap(index); } }