我正在尝试动态添加标记(不是静态的)。动态意思是,当我从服务器获取更新时添加标记。
因此,以下是我的 ItemizedOverlay 代码:
private class VehicleItemizedOverlay extends ItemizedOverlay<OverlayItem>{
private ArrayList<OverlayItem> mOverlayItems = new ArrayList<OverlayItem>();
public VehicleItemizedOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) {
super(pDefaultMarker, pResourceProxy);
}
@Override
public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {
return false;
}
@Override
protected OverlayItem createItem(int pos) {
return mOverlayItems.get(pos);
}
@Override
public int size() {
if(mOverlayItems!=null) return mOverlayItems.size();
else return 0;
}
public void addOverlayItem(double longitude, double latitude, Bitmap bitmap){
if(Preferences.DEBUG) Log.d("MapActivity", "Latitude: "+latitude+" Longitude: "+longitude);
MarkerDrawable drawable = new MarkerDrawable(MapActivity.this, bitmap);
OverlayItem item = new OverlayItem("a", "a", new GeoPoint((int)(latitude*1e6), (int)(longitude*1e6)));
item.setMarker(drawable);
item.setMarkerHotspot(HotspotPlace.CENTER);
mOverlayItems.add(item);
populateNow();
}
public void populateNow(){
populate();
}
}
以下是方法,我正在创建 ItemizedOverlay 并将其添加到我的活动 onCreate() 中的 MapView:
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
mVehicleOverlay = new VehicleItemizedOverlay(getResources().getDrawable(R.drawable.stub), mResourceProxy);
mMapView.getOverlays().add(mOverlay);
现在,每当我从服务器获得响应时,我都会创建 OverlayItems 并将其添加到 ItemizedOverlay。
//onResponse is callback I received on receiving response. Vehicle is my vehicle object
public void onResponse(ArrayList<Vehicle> aVehicles) {
for(int i=0;i<mVehicles.size();i++){
final int lat = (int)(mVehicles.get(i).getLatitude()*1e6);
final int lon = (int)(mVehicles.get(i).getLongitude()*1e6);
mVehicleOverlay.addOverlayItem(lon, lat, bitmap);
}
}
但是所有覆盖项目在地图的中心点相互重叠。我错过了什么吗?
此外,如果我在添加之前向 mVehicleOverlay 添加了一些静态叠加项目,那么它可以正常工作。
mVehicleOverlay = new VehicleItemizedOverlay(getResources().getDrawable(R.drawable.stub), mResourceProxy);
final int lat = (int)(STATIC_LATITUDE*1e6);
final int lat = (int)(STATIC_LONGITUDE*1e6);
mOverlay.addOverlayItem(lon, lat, bitmap);
mMapView.getOverlays().add(mVehicleOverlay);
在 OSMDroid 中,添加自定义逐项叠加后,我是否应该像在 Google API v1 中那样添加和填充叠加项?或者我在这里遗漏了什么?