- OverlayItem not updating on location change (OSM)
- 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)
- {
- }
- }
- 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 mLongtitude = 31987968;
- int mLatitude = 34783155;
- ArrayList<OverlayItem> mItems;
- @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(mLongtitude, mLatitude); // centre map here
- GeoPoint point3 = new GeoPoint(mLongtitude + 2000, mLatitude + 2000); // icon
- // goes
- // 31.987968,34.783155
- mapController.setCenter(point2);
- mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
- mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100,
- this);
- mItems = new ArrayList<OverlayItem>();
- // Put overlay icon a little way from map centre
- mItems.add(new OverlayItem("Here", "SampleDescription", point3));
- /* OnTapListener for the Markers, shows a simple Toast. */
- // REFER TO THE GESTURE LISTEMER BY NAME NOW
- this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems,
- new Glistener() , mResourceProxy);
- this.mMapView.getOverlays().add(this.mMyLocationOverlay);
- mMapView.invalidate();
- }
- //We can't use an anonymous class anymore if we want to change the position
- // of the overlays/icons when location changed, give it a name
- class Glistener implements OnItemGestureListener<OverlayItem> {
- @Override
- public boolean onItemLongPress(int index, OverlayItem item) {
- Toast.makeText(SampleWithMinimapItemizedoverlay.this, "Item " + item.mTitle,
- Toast.LENGTH_LONG).show();
- return false;
- }
- @Override
- public boolean onItemSingleTapUp(int index, OverlayItem item) {
- Toast.makeText(SampleWithMinimapItemizedoverlay.this, "Item " + item.mTitle,
- Toast.LENGTH_LONG).show();
- return true; // We 'handled' this event.
- }
- }
- // -------//here I tried to do the change !!!!!!!!!---------------
- // -- The map location being updated but not the overlayItem.
- public void onLocationChanged(Location location) {
- mLatitude = (int) (location.getLatitude() * 1E6);
- mLongtitude = (int) (location.getLongitude() * 1E6);
- Toast.makeText(SampleWithMinimapItemizedoverlay.this,
- "Location changed. Lat:" + mLatitude + " long:" + mLongtitude,
- Toast.LENGTH_LONG).show();
- GeoPoint gpt = new GeoPoint(mLatitude, mLongtitude);
- mapController.setCenter(gpt);
- mItems.clear(); // COMMENT OUT THIS LINE IF YOU WANT A NEW ICON FOR EACH CHANGE OF POSITION
- mItems.add(new OverlayItem("New", "SampleDescription", gpt));
- // Change the overlay
- this.mMyLocationOverlay = new ItemizedIconOverlay<OverlayItem>(mItems,
- new Glistener() , mResourceProxy);
- this.mMapView.getOverlays().clear();
- this.mMapView.getOverlays().add(this.mMyLocationOverlay);
- mMapView.invalidate();
- }
- @Override
- public void onProviderDisabled(String arg0) {
- }
- @Override
- public void onProviderEnabled(String provider) {
- }
- @Override
- public void onStatusChanged(String provider, int status, Bundle extras) {
- }
- }