package org.osmdroid.samplefragments.data; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import org.osmdroid.api.IGeoPoint; 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.Marker; import org.osmdroid.views.overlay.OverlayItem; import org.osmdroid.views.overlay.gestures.RotationGestureOverlay; import java.util.ArrayList; import java.util.List; /** * icons generated from https://github.com/missioncommand/mil-sym-java * demonstrates one way to show custom icons for a given point on the map * (Marker) * * @author alex */ public class SampleMilitaryIconsMarker extends BaseSampleFragment { // =========================================================== // Constants // =========================================================== public static final String TITLE = "Military Icons using Markers"; 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_ADDICONS_ID = MENU_ZOOMOUT_ID + 1; private static final int MENU_LAST_ID = MENU_ADDICONS_ID + 1; // Always set to last unused id // =========================================================== // Fields // =========================================================== private RotationGestureOverlay mRotationGestureOverlay; private OverlayItem overlayItem; private List<Drawable> icons = new ArrayList<>(4); @Override public String getSampleTitle() { return TITLE; } // =========================================================== // Constructors // =========================================================== @Override protected void addOverlays() { super.addOverlays(); final Context context = getActivity(); icons.add(getResources().getDrawable(org.osmdroid.R.drawable.sfgpuci)); icons.add(getResources().getDrawable(org.osmdroid.R.drawable.shgpuci)); icons.add(getResources().getDrawable(org.osmdroid.R.drawable.sngpuci)); icons.add(getResources().getDrawable(org.osmdroid.R.drawable.sugpuci)); //generates 50 randomized points addIcons(50); mRotationGestureOverlay = new RotationGestureOverlay(mMapView); mRotationGestureOverlay.setEnabled(false); mMapView.getOverlays().add(mRotationGestureOverlay); // Zoom and center on the focused item. mMapView.getController().setZoom(3); setHasOptionsMenu(true); Toast.makeText(context, "Icon selection and location are random!", Toast.LENGTH_SHORT).show(); } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods from SuperClass/Interfaces // =========================================================== @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { // Put overlay items first mMapView.getOverlayManager().onCreateOptionsMenu(menu, MENU_LAST_ID, mMapView); menu.add(0, MENU_ZOOMIN_ID, Menu.NONE, "ZoomIn"); menu.add(0, MENU_ZOOMOUT_ID, Menu.NONE, "ZoomOut"); menu.add(0, MENU_ZOOMOUT_ID, Menu.NONE, "ZoomOut"); menu.add(0, MENU_ADDICONS_ID, Menu.NONE, "AddIcons"); super.onCreateOptionsMenu(menu, inflater); } @Override public void onPrepareOptionsMenu(Menu menu) { mMapView.getOverlayManager().onPrepareOptionsMenu(menu, MENU_LAST_ID, mMapView); super.onPrepareOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mMapView.getOverlayManager().onOptionsItemSelected(item, MENU_LAST_ID, mMapView)) { return true; } switch (item.getItemId()) { case MENU_ZOOMIN_ID: mMapView.getController().zoomIn(); return true; case MENU_ZOOMOUT_ID: mMapView.getController().zoomOut(); return true; case MENU_ADDICONS_ID: addIcons(500); return true; } return false; } private void addIcons(int count) { for (int i = 0; i < count; i++) { double random_lon = (Math.random() * 360) - 180; double random_lat = (Math.random() * 180) - 90; Marker m = new Marker(mMapView); m.setPosition(new GeoPoint(random_lat, random_lon)); int index = (int) (Math.random() * (icons.size())); if (index == icons.size()) { index--; } m.setSnippet("A random point"); m.setSubDescription("location: " + random_lat + "," + random_lon); m.setIcon(icons.get(index)); mMapView.getOverlayManager().add(m); } mMapView.invalidate(); Toast.makeText(getActivity(), count + " icons added! Current size: " + mMapView.getOverlayManager().size(), Toast.LENGTH_SHORT).show(); } @Override public void onDestroyView(){ //itemOverlay.onDetach(mMapView); super.onDestroyView(); } // =========================================================== // Methods // =========================================================== // =========================================================== // Inner and Anonymous Classes // =========================================================== }