2013-04-24 60 views
0

在我的应用程序中,我的web服务有多个经纬度。在这个时间点上,我能够使用下面的代码只显示一个坐标在goole地图上。具有ItemisedOverlay的多个标记Android

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




} 

现在,我想使用数组动态地图上设置纬度和经度。我正在使用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; 
} 

} 

MyItemizedOverlay.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); 
    } 
} 
+0

您现在已经开始了吗?如果是,请切换到Google地图v2。 – Shadow 2013-04-24 10:19:48

+0

我不知道谷歌地图版本我使用https://github.com/jgilfelt/android-mapviewballoons示例 – Christina 2013-04-24 10:56:30

回答

0

使用这种方式..

为谷歌map v1 - >https://stackoverflow.com/a/9630396/1168654

下面的代码

调用谷歌地图V2检查这种方法

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)); 
    } 
+0

我想根据我的代码适应它,因为我有其他数据要添加在infowindow – Christina 2013-04-24 10:26:48

+0

@Christina :http://stackoverflow.com/a/9630396/1168654这是一样的你的代码 – 2013-04-24 10:29:40

+0

老兄检查更新我试过了,但只有一个标记得到显示,它不显示我现在的infowindow现在 – Christina 2013-04-24 11:00:19