带有ItemisedOverlay Android的多个标记

带有ItemisedOverlay Android的多个标记,android,android-mapview,android-maps,Android,Android Mapview,Android Maps,在我的应用程序中,我的web服务提供了多个纬度和经度。此时,我可以使用下面的代码在谷歌地图上只显示一个坐标 public class CustomMap extends MapActivity { MapView mapView; List<Overlay> mapOverlays; Drawable drawable; Drawable drawable2; CustomItemizedOverlay<CustomOverlayIte

在我的应用程序中,我的web服务提供了多个纬度和经度。此时,我可以使用下面的代码在谷歌地图上只显示一个坐标

public class CustomMap extends MapActivity {

    MapView mapView;
    List<Overlay> mapOverlays;
    Drawable drawable;
    Drawable drawable2;
    CustomItemizedOverlay<CustomOverlayItem> itemizedOverlay2;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gmap);
        //setContentView(LayoutInflater.from(getParent()).inflate(R.layout.main_ou, null));

        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        mapOverlays = mapView.getOverlays();

        // second overlay
        drawable2 = getResources().getDrawable(R.drawable.red);
        itemizedOverlay2 = new CustomItemizedOverlay<CustomOverlayItem>(drawable2, mapView);
        GeoPoint point3 =  new GeoPoint((int)(-10.224609*1E6),(int)(17.506044*1E6));
        CustomOverlayItem overlayItem3 = new CustomOverlayItem(point3, "Title", 
        "Cliquez here", null);

        itemizedOverlay2.addOverlay(overlayItem3);
        //itemizedOverlay2.onTap(0);

        mapOverlays.add(itemizedOverlay2);

        final MapController mc = mapView.getController();
        mc.animateTo(point3);
        mc.setZoom(16);

    }


    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }




}
公共类CustomMap扩展了MapActivity{
地图视图;
列出地图覆盖图;
可拉伸;
可拉伸2;
CustomItemizedOverlay ItemizedOverlay 2;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.gmap);
//setContentView(LayoutInflater.from(getParent()).flate(R.layout.main_ou,null));
mapView=(mapView)findViewById(R.id.mapView);
mapView.SetBuilTinZoomControl(真);
mapOverlays=mapView.getOverlays();
//二次叠加
drawable2=getResources().getDrawable(R.drawable.red);
itemizedOverlay2=新的自定义ItemizedOverlay(drawable2,mapView);
地质点3=新的地质点((int)-10.224609*1E6),(int)(17.506044*1E6));
CustomOverlayItem overlayItem3=新CustomOverlayItem(第3点,“标题”,
“这里的派系”,空);
itemizedOverlay2.addOverlay(overlayItem3);
//itemizedOverlay2.onTap(0);
添加(itemizedOverlay2);
最终的MapController mc=mapView.getController();
司令官(第3点),;
mc.setZoom(16);
}
@凌驾
受保护的布尔值isRouteDisplayed(){
返回false;
}
}
现在,我想使用数组在地图上动态设置纬度和经度。我正在使用ArrayList val;获取和设置数据。有人能给我一个如何使类动态的提示吗

新更新下面的代码只显示一个标记,但我希望所有标记都显示出来

public class Map extends MapActivity {

     private MapController mapControll;
     private GeoPoint geoPoint=null;
     private MapView mapview;
     private MyItemizedOverlay userPicOverlay;
     private MyItemizedOverlay nearPicOverlay;
     private Drawable userPic,atmPic;
     private CustomOverlayItem nearatms[] = new CustomOverlayItem[50];
     public static Context context;

     double latitude,longitude;



    ArrayList<Article> mArticles;
    CustomOverlayItem overlayItem3 ;
    public ArrayList<Article> articles;
    public static ArrayList<Article> article;

    EditText search;
    DBHelper helper;
    GeoPoint point;

    MapView mapView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aproximite);
        context = getApplicationContext();

        mapView = (MapView) findViewById(R.id.mapview);
        mapView = (MapView) findViewById(R.id.mapview);
        search = (EditText)findViewById(R.id.search_box);

        helper = DBHelper.getInstance(this);

        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.boutton_log);
        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.boutton_log);
        nearPicOverlay = new MyItemizedOverlay(atmPic);


        new GetLocationTask().execute();

    }




private class GetLocationTask extends AsyncTask<Void, Void, Void> {

        @Override
        public Void doInBackground(Void... params) {
            mArticles = helper.getArticlesList();

            return null;
        }

        @Override
        public void onPreExecute() {}

        @Override
        public void onPostExecute(Void result) {            

          try {

                for (int i = 0; i < mArticles.size(); i++) {


                    point =  new GeoPoint((int)(Double.parseDouble(mArticles.get(i).getLatitude())*1E6),(int)(Double.parseDouble(mArticles.get(i).getLongitude())*1E6));
                    nearatms[i] = new CustomOverlayItem(point ,"title", 
                    "click here", null);

                    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;
}

}
公共类映射扩展了MapActivity{
私有映射控制器mapControll;
专用地质点=空;
私有地图视图;
私有MyItemizeOverlay用户PicOverlay;
私有MyItemizedOverlay近PicOverlay;
私有可绘制用户PIC,atmPic;
私人CustomOverlayItem NearATM[]=新CustomOverlayItem[50];
公共静态语境;
双纬度,经度;
ArrayList mArticles;
自定义覆盖项覆盖项3;
公共ArrayList文章;
公共静态ArrayList文章;
编辑文本搜索;
DBHelper;
地质点;
地图视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.aproximite);
context=getApplicationContext();
mapView=(mapView)findViewById(R.id.mapView);
mapView=(mapView)findViewById(R.id.mapView);
search=(EditText)findViewById(R.id.search\u框);
helper=DBHelper.getInstance(this);
地质点=新的地质点((int)(纬度*1E6),(int)(经度*1E6));
mapview=(mapview)findViewById(R.id.mapview);
mapControll=mapview.getController();
mapview.SetBuilTinZoomControl(真);
mapview.setStreetView(真);
mapControll.setZoom(16);
mapControll.animateTo(地质点);
userPic=this.getResources().getDrawable(R.drawable.boutton_log);
userPicOverlay=newmyitemizedoverlay(userPic);
OverlayItem OverlayItem=新的OverlayItem(地理点,“我在这里!!!”,null);
userPicOverlay.addOverlay(overlayItem);
mapview.getOverlays().add(userPicOverlay);
atmPic=this.getResources().getDrawable(R.drawable.boutton_log);
nearPicOverlay=新的MyItemizedOverlay(atmPic);
新建GetLocationTask().execute();
}
私有类GetLocationTask扩展了AsyncTask{
@凌驾
公共Void doInBackground(Void…params){
mArticles=helper.getArticlesList();
返回null;
}
@凌驾
public void onPreExecute(){}
@凌驾
public void onPostExecute(作废结果){
试一试{
对于(int i=0;i
MyItemizeOverlay.class

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();
        System.out.println(index);
        return super.onTap(index);
    }
}
公共类MyItemizeOverlay扩展了ItemizeOverlay{
私人ArrayList myOverlays;
公共MyItemizedOverlay(可绘制的默认标记){
super(boundCenterBottom(defaultMarker));
myOverlays=新的ArrayList();
填充();
}
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
@凌驾
受保护的OverlayItem createItem(int i){
返回myOverlays.get(i);
}
//删除覆盖项i
公共无效删除项(int i){
删除(i);
填充();
}
//返回列表中的当前项数
@凌驾
公共整数大小(){
返回myOverlays.size();
}
公共void addOverlayItem(OverlayItem OverlayItem){
添加(覆盖项);
填充();
}
public void addOverlayItem(int-lat、int-lon、字符串标题){
试一试{
地质点=新的地质点(纬度、经度);
OverlayItem OverlayItem=新的OverlayItem(点、标题、空);
addOverlayItem(
for(int i = 0 ; i < arraylist.size();i++){
    addMarker(mapview,arraylistLat.get(i),arraylistLong.get(i),title.get(i),arraysnippet.get(i));
}
private void addMarker(GoogleMap map, double lat, double lon,
            String string, String string2) {
        map.addMarker(new MarkerOptions().position(new LatLng(lat, lon))
                .title(string).snippet(string2));
    }