Вашу проблему легко объяснить: вы используете только то местоположение, которое вы получили, пока ваша программа все еще использует метод onCreate()
.
Вам необходимо обновить оверлей от слушателя.Поэтому создайте отдельный метод, который можно вызывать из LocationListener
, который обновляет оверлей.
Edit:
в основном делает это (не завершено, но должно дать вам идею!)
public class MyMapActivity extends MapActivity {
MapView mapView;
LocationListener locListener;
public onCreate() {
// setup your map
mapView = findViewById(R.id.my_map);
// setup listener
locListener = new LocationListener() {
// override methods
public void onLocationChanged(Location location) {
updateOverlays(location);
}
}
}
public void updateOverlays(Location location) {
// this is basically your code just a bit modified (removed unnecessary code and added new code)
mc = mapView.getController();
p = new GeoPoint(location.getLatitudeE6(), location.getLongitudeE6());
mc.animateTo(p);
mc.setZoom(10);
mapView.invalidate();
// remove all existing overlays!
List<Overlay> mapOverlays = mapView.getOverlays();
mapOverlays.clear();
//Compass Setup
Compass = new MyLocationOverlay(this, mapView);
mapOverlays.add(Compass);
Drawable drawable = getResources().getDrawable(R.drawable.black);
MapOverlays itemizedoverlay = new MapOverlays(drawable, this);
OverlayItem overlayitem = new OverlayItem(p, "Hint", "Your Are Here");
itemizedoverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedoverlay);
}
}
Edit2:
У вас есть ошибка в расчете GeoPoint.Вы не даете 1E6 целых чисел, вы просто даете небольшие двойные числа.Измените
point = new GeoPoint((int) location.getLatitude() , (int) location.getLongitude());
на
point = new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));