package org.osmdroid.samplefragments.events;
import android.content.Context;
import android.location.Location;
import android.widget.Toast;
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.api.IMapController;
import org.osmdroid.samplefragments.BaseSampleFragment;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.overlay.ItemizedIconOverlay;
import org.osmdroid.views.overlay.ItemizedOverlayWithFocus;
import org.osmdroid.views.overlay.MinimapOverlay;
import org.osmdroid.views.overlay.OverlayItem;
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.IMyLocationConsumer;
import org.osmdroid.views.overlay.mylocation.IMyLocationProvider;
import java.util.ArrayList;
/**
* @author Tyrone Tudehope
*/
public class SampleAnimatedZoomToLocation extends BaseSampleFragment {
public static final String TITLE = "Animated Zoom to Location";
private ItemizedOverlayWithFocus<OverlayItem> mMyLocationOverlay;
private RotationGestureOverlay mRotationGestureOverlay;
private GpsMyLocationProvider mGpsMyLocationProvider;
@Override
public void onPause() {
super.onPause();
if(mGpsMyLocationProvider != null) {
mGpsMyLocationProvider.stopLocationProvider();
}
}
@Override
public String getSampleTitle() {
return TITLE;
}
@Override
protected void addOverlays() {
super.addOverlays();
final Context context = getActivity();
Toast.makeText(getActivity(), "Make sure location services are enabled!", Toast.LENGTH_LONG).show();
mGpsMyLocationProvider = new GpsMyLocationProvider(context);
mGpsMyLocationProvider.startLocationProvider(new IMyLocationConsumer() {
@Override
public void onLocationChanged(Location location, IMyLocationProvider source) {
mGpsMyLocationProvider.stopLocationProvider();
if(mMyLocationOverlay == null) {
final ArrayList<OverlayItem> items = new ArrayList<>();
items.add(new OverlayItem("Me", "My Location",
new GeoPoint(location)));
mMyLocationOverlay = new ItemizedOverlayWithFocus<>(items,
new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() {
@Override
public boolean onItemSingleTapUp(final int index, final OverlayItem item) {
IMapController mapController = mMapView.getController();
mapController.setCenter(item.getPoint());
mapController.zoomTo(mMapView.getMaxZoomLevel());
return true;
}
@Override
public boolean onItemLongPress(final int index, final OverlayItem item) {
return false;
}
}, context);
mMyLocationOverlay.setFocusItemsOnTap(true);
mMyLocationOverlay.setFocusedItem(0);
mMapView.getOverlays().add(mMyLocationOverlay);
mMapView.getController().setZoom(10);
IGeoPoint geoPoint = mMyLocationOverlay.getFocusedItem().getPoint();
mMapView.getController().animateTo(geoPoint);
}
}
});
mRotationGestureOverlay = new RotationGestureOverlay(mMapView);
mRotationGestureOverlay.setEnabled(false);
mMapView.getOverlays().add(mRotationGestureOverlay);
MinimapOverlay miniMapOverlay = new MinimapOverlay(context,
mMapView.getTileRequestCompleteHandler());
mMapView.getOverlays().add(miniMapOverlay);
}
}