
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; }} 我这里有两个问题.当我试图只添加一个标记时,它可以工作但是多次调用draw方法.但为什么?什么时候被调用?
第二个问题是我如何添加新标记.我创建了第二个名为p2的geoPoint,之后该怎么办?非常感谢你.
解决方法 我在我的项目中实现了多个标记.这是示例代码;您需要更改的一些内容是标记图像,长度(您希望在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); }} 总结 以上是内存溢出为你收集整理的在Android中的谷歌地图上添加多个标记全部内容,希望文章能够帮你解决在Android中的谷歌地图上添加多个标记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)