package org.osmdroid.samples; import android.app.Activity; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams; import org.osmdroid.api.IMapController; import org.osmdroid.constants.OpenStreetMapConstants; import org.osmdroid.tileprovider.tilesource.ITileSource; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.MapView; import org.osmdroid.views.overlay.MinimapOverlay; import org.osmdroid.views.overlay.ScaleBarOverlay; import org.osmdroid.views.overlay.mylocation.SimpleLocationOverlay; /** * * @author Nicolas Gramlich * */ public class SampleExtensive extends Activity implements OpenStreetMapConstants { // =========================================================== // Constants // =========================================================== private static final int MENU_ZOOMIN_ID = Menu.FIRST; private static final int MENU_ZOOMOUT_ID = MENU_ZOOMIN_ID + 1; private static final int MENU_TILE_SOURCE_ID = MENU_ZOOMOUT_ID + 1; private static final int MENU_ANIMATION_ID = MENU_TILE_SOURCE_ID + 1; private static final int MENU_MINIMAP_ID = MENU_ANIMATION_ID + 1; // =========================================================== // Fields // =========================================================== private MapView mMapView; private IMapController mOsmvController; private SimpleLocationOverlay mMyLocationOverlay; private ScaleBarOverlay mScaleBarOverlay; private MinimapOverlay mMiniMapOverlay; // =========================================================== // Constructors // =========================================================== /** Called when the activity is first created. */ @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); final RelativeLayout rl = new RelativeLayout(this); this.mMapView = new MapView(this); this.mMapView.setTilesScaledToDpi(true); this.mOsmvController = this.mMapView.getController(); rl.addView(this.mMapView, new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); /* Scale Bar Overlay */ { this.mScaleBarOverlay = new ScaleBarOverlay(mMapView); this.mMapView.getOverlays().add(mScaleBarOverlay); // Scale bar tries to draw as 1-inch, so to put it in the top center, set x offset to // half screen width, minus half an inch. this.mScaleBarOverlay.setScaleBarOffset( (int) (getResources().getDisplayMetrics().widthPixels / 2 - getResources() .getDisplayMetrics().xdpi / 2), 10); } /* SingleLocation-Overlay */ { /* * Create a static Overlay showing a single location. (Gets updated in * onLocationChanged(Location loc)! */ this.mMyLocationOverlay = new SimpleLocationOverlay(((BitmapDrawable)getResources().getDrawable(org.osmdroid.library.R.drawable.person)).getBitmap()); this.mMapView.getOverlays().add(mMyLocationOverlay); } /* ZoomControls */ { /* Create a ImageView with a zoomIn-Icon. */ final ImageView ivZoomIn = new ImageView(this); ivZoomIn.setImageResource(org.osmdroid.R.drawable.zoom_in); /* Create RelativeLayoutParams, that position it in the top right corner. */ final RelativeLayout.LayoutParams zoominParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); zoominParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); zoominParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); rl.addView(ivZoomIn, zoominParams); ivZoomIn.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { SampleExtensive.this.mOsmvController.zoomIn(); } }); /* Create a ImageView with a zoomOut-Icon. */ final ImageView ivZoomOut = new ImageView(this); ivZoomOut.setImageResource(org.osmdroid.R.drawable.zoom_out); /* Create RelativeLayoutParams, that position it in the top left corner. */ final RelativeLayout.LayoutParams zoomoutParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); zoomoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); zoomoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); rl.addView(ivZoomOut, zoomoutParams); ivZoomOut.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { SampleExtensive.this.mOsmvController.zoomOut(); } }); } /* MiniMap */ { mMiniMapOverlay = new MinimapOverlay(this, mMapView.getTileRequestCompleteHandler()); this.mMapView.getOverlays().add(mMiniMapOverlay); } // Default location and zoom level IMapController mapController = mMapView.getController(); mapController.setZoom(13); GeoPoint startPoint = new GeoPoint(50.936255, 6.957779); mapController.setCenter(startPoint); // PathOverlay pathOverlay = new PathOverlay(Color.RED, this); // pathOverlay.addPoint(new GeoPoint(40.714623, -74.006605)); // pathOverlay.addPoint(new GeoPoint(38.8951118, -77.0363658)); // pathOverlay.addPoint(new GeoPoint(34.052186, -118.243932)); // pathOverlay.getPaint().setStrokeWidth(50.0f); // pathOverlay.setAlpha(100); // this.mMapView.getOverlays().add(pathOverlay); this.setContentView(rl); } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public boolean onCreateOptionsMenu(final Menu pMenu) { pMenu.add(0, MENU_ZOOMIN_ID, Menu.NONE, "ZoomIn"); pMenu.add(0, MENU_ZOOMOUT_ID, Menu.NONE, "ZoomOut"); final SubMenu subMenu = pMenu.addSubMenu(0, MENU_TILE_SOURCE_ID, Menu.NONE, "Choose Tile Source"); { for (final ITileSource tileSource : TileSourceFactory.getTileSources()) { subMenu.add(0, 1000 + tileSource.ordinal(), Menu.NONE, tileSource.name()); } } pMenu.add(0, MENU_ANIMATION_ID, Menu.NONE, "Run Animation"); pMenu.add(0, MENU_MINIMAP_ID, Menu.NONE, "Toggle Minimap"); return true; } @Override public boolean onMenuItemSelected(final int featureId, final MenuItem item) { switch (item.getItemId()) { case MENU_ZOOMIN_ID: this.mOsmvController.zoomIn(); return true; case MENU_ZOOMOUT_ID: this.mOsmvController.zoomOut(); return true; case MENU_TILE_SOURCE_ID: this.mMapView.invalidate(); return true; case MENU_MINIMAP_ID: mMiniMapOverlay.setEnabled(!mMiniMapOverlay.isEnabled()); this.mMapView.invalidate(); return true; case MENU_ANIMATION_ID: // this.mMapView.getController().animateTo(52370816, 9735936, // MapControllerOld.AnimationType.MIDDLEPEAKSPEED, // MapControllerOld.ANIMATION_SMOOTHNESS_HIGH, // MapControllerOld.ANIMATION_DURATION_DEFAULT); // Hannover // Stop the Animation after 500ms (just to show that it works) // new Handler().postDelayed(new Runnable(){ // @Override // public void run() { // SampleExtensive.this.mMapView.getController().stopAnimation(false); // } // }, 500); return true; default: ITileSource tileSource = TileSourceFactory.getTileSource(item.getItemId() - 1000); mMapView.setTileSource(tileSource); mMiniMapOverlay.setTileSource(tileSource); } return false; } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== }