我正在使用 OSMdroid。
多亏了这篇向 OSMDROID 添加覆盖以在特定位置创建覆盖静态项目的帖子,我已经成功了。
现在我正在尝试使地图更具动态性。因此,当位置更改时,OverLayItem(在地图上标记特定位置)也会自行更新。
这就是我试图做的。地图会更新,但 OverLayItem 不会。
代码:
package com.test.overlay;
import java.util.ArrayList;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.ResourceProxy;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlay;
import org.osmdroid.views.overlay.OverlayItem;
import org.osmdroid.views.util.constants.MapViewConstants;
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
public class SampleWithMinimapItemizedoverlay extends Activity implements
LocationListener, MapViewConstants
{
private MapView mMapView;
private MapController mapController;
private LocationManager mLocMgr;
private ItemizedOverlay<OverlayItem> mMyLocationOverlay;
private ResourceProxy mResourceProxy;
int longtitude = 31987968;
int latitude = 34783155;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mResourceProxy = new DefaultResourceProxyImpl(getApplicationContext());
setContentView(R.layout.main);
mMapView = (MapView) this.findViewById(R.id.mapview);
mMapView.setTileSource(TileSourceFactory.MAPNIK);
mMapView.setBuiltInZoomControls(true);
mMapView.setMultiTouchControls(true);
mapController = this.mMapView.getController();
mapController.setZoom(15);
GeoPoint point2 = new GeoPoint(longtitude, latitude); // centre map here
GeoPoint point3 = new GeoPoint(longtitude + 2000, latitude + 2000); // icon
// goes
// here
// 31.987968,34.783155
mapController.setCenter(point2);
mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100,
this);
ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();
// Put overlay icon a little way from map centre
items.add(new OverlayItem("Here", "SampleDescription", point3));
/* OnTapListener for the Markers, shows a simple Toast. */
this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>()
{
@Override
public boolean onItemSingleTapUp(final int index,
final OverlayItem item)
{
Toast.makeText(SampleWithMinimapItemizedoverlay.this,
"Item '" + item.mTitle, Toast.LENGTH_LONG)
.show();
return true; // We 'handled' this event.
}
@Override
public boolean onItemLongPress(final int index,
final OverlayItem item)
{
Toast.makeText(SampleWithMinimapItemizedoverlay.this,
"Item '" + item.mTitle, Toast.LENGTH_LONG)
.show();
return false;
}
}, mResourceProxy);
this.mMapView.getOverlays().add(this.mMyLocationOverlay);
mMapView.invalidate();
}
-------//here I tried to do the change !!!!!!!!!---------------
-- The map location being updated but not the overlayItem.
public void onLocationChanged(Location location)
{
latitude = (int) (location.getLatitude() * 1E6);
longtitude = (int) (location.getLongitude() * 1E6);
Toast.makeText(SampleWithMinimapItemizedoverlay.this,
"Location changed. Lat:" + latitude + " long:" + longtitude ,
Toast.LENGTH_LONG).show();
GeoPoint gpt = new GeoPoint(latitude, longtitude);
mapController.setCenter(gpt);
mMapView.invalidate();
}
@Override
public void onProviderDisabled(String arg0)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
}
谢谢,
射线。