/* * Copyright (c) 2015 Daimler AG / Moovel GmbH * * All rights reserved */ package com.car2go.maps.osm.drawable; import com.car2go.maps.AnyMap; import com.car2go.maps.model.Circle; import com.car2go.maps.model.CircleOptions; import com.car2go.maps.model.Marker; import com.car2go.maps.model.MarkerOptions; import com.car2go.maps.model.Polygon; import com.car2go.maps.model.PolygonOptions; import com.car2go.maps.model.Polyline; import com.car2go.maps.model.PolylineOptions; import com.car2go.maps.osm.drawable.overlay.MarkerOverlayItem; import org.osmdroid.views.MapView; import org.osmdroid.views.overlay.ItemizedIconOverlay; import java.util.ArrayList; /** * Creates {@link com.car2go.maps.model.DrawableComponent} and attaches them to maps */ public class DrawableComponentFactory { private final MapView map; private final ItemizedIconOverlay<MarkerOverlayItem> markersOverlay; private AnyMap.OnMarkerClickListener onMarkerClickListener = AnyMap.OnMarkerClickListener.NULL; public DrawableComponentFactory(MapView map) { this.map = map; markersOverlay = new ItemizedIconOverlay<>( map.getContext(), new ArrayList<MarkerOverlayItem>(), new ItemizedIconOverlay.OnItemGestureListener<MarkerOverlayItem>() { @Override public boolean onItemSingleTapUp(int index, MarkerOverlayItem item) { return onMarkerClickListener.onMarkerClick(item.marker); } @Override public boolean onItemLongPress(int index, MarkerOverlayItem item) { return false; } } ); map.getOverlays().add(markersOverlay); } /** * Adds marker to the map * * @return added {@link Marker} which is bound to the map. */ public Marker addMarker(MarkerOptions options) { return new OsmMarker(map, options, markersOverlay); } /** * Adds circle to the map * * @return added {@link Circle} which is bound to the map. */ public Circle addCircle(CircleOptions options) { return new OsmCircle(map, options); } /** * Adds polygon to the map. * * @return added {@link Polygon} which is bound to the map */ public Polygon addPolygon(PolygonOptions options) { return new OsmPolygon(map, options); } /** * Adds polyline to the map. * * @return added {@link Polyline} which is bound to the map */ public Polyline addPolyline(PolylineOptions options) { return new OsmPolyline(map, options); } /** * @param listener listener which will be invoked on marker clicks */ public void setOnMarkerClickListener(AnyMap.OnMarkerClickListener listener) { onMarkerClickListener = listener == null ? AnyMap.OnMarkerClickListener.NULL : listener; } }