在Android中的谷歌地图上添加多个标记

在Android中的谷歌地图上添加多个标记,第1张

概述我是在谷歌地图上添加多个标记的triyng.这是我的代码部分 public class GoogleMap extends MapView { MapController mc; MapView mapView; GeoPoint p; @Override public void onCreate(Bundle savedInstanceSt 我是在谷歌地图上添加多个标记的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;         }}

我这里有两个问题.当我试图只添加一个标记时,它可以工作但是多次调用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中的谷歌地图上添加多个标记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1136842.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存