Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Android中的谷歌地图上添加多个标记大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我是在谷歌地图上添加多个标记的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@L_874_7@.但为什么?什么时候被调用

第二个问题我如何添加标记.我创建了第二个名为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中的谷歌地图上添加多个标记所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。