use of io.jawg.osmcontributor.ui.utils.views.map.marker.LocationMarkerView in project osm-contributor by jawg.
the class MapboxListener method listen.
/**
* Register the listener for the map
* @param mapboxMap
*/
public void listen(final MapboxMap mapboxMap, final MapView mapView) {
this.mapboxMap = mapboxMap;
// Listen on map click
mapboxMap.setOnMapClickListener(new MapboxMap.OnMapClickListener() {
@Override
public void onMapClick(@NonNull LatLng point) {
MapboxListener.this.onMapClick();
}
});
// Listen on marker click
mapboxMap.setOnMarkerClickListener(new MapboxMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(@NonNull Marker marker) {
if (marker instanceof WayMarker) {
WayMarker wayMarker = (WayMarker) marker;
MapboxListener.this.onWayMarkerClick(wayMarker);
}
return false;
}
});
// Listen on location and zoom change
mapboxMap.setOnCameraChangeListener(new MapboxMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition position) {
// Location change, call the listener method
if (MapboxListener.this.position != null) {
if (!MapboxListener.this.position.target.equals(position.target)) {
onCameraPositionChange();
}
// Zoom change, call the listener method
if (MapboxListener.this.position.zoom != position.zoom) {
onCameraZoomChange(position.zoom);
}
}
MapboxListener.this.position = position;
}
});
final ScaleGestureDetector scaleGestureDetector = new ScaleGestureDetector(mapFragment.getActivity(), new ZoomAnimationGestureDetector() {
@Override
public void onZoomAnimationEnd(ValueAnimator animator) {
if (zoomValueAnimator != null && zoomValueAnimator.isRunning()) {
zoomValueAnimator.cancel();
}
zoomValueAnimator = animator;
zoomValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
CameraPosition position = mapboxMap.getCameraPosition();
mapboxMap.setCameraPosition(new CameraPosition.Builder().target(position.target).bearing(position.bearing).zoom(position.zoom + (Float) valueAnimator.getAnimatedValue()).build());
}
});
zoomValueAnimator.start();
}
});
mapView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
scaleGestureDetector.onTouchEvent(motionEvent);
return false;
}
});
// Listen on marker view click
mapboxMap.getMarkerViewManager().setOnMarkerViewClickListener(new MapboxMap.OnMarkerViewClickListener() {
@Override
public boolean onMarkerClick(@NonNull Marker marker, @NonNull View view, @NonNull MapboxMap.MarkerViewAdapter adapter) {
if (marker instanceof LocationMarkerView) {
LocationMarkerView locationMarker = (LocationMarkerView) marker;
MapboxListener.this.onLocationMarkerClick(locationMarker);
return false;
}
return false;
}
});
}
use of io.jawg.osmcontributor.ui.utils.views.map.marker.LocationMarkerView in project osm-contributor by jawg.
the class MapFragmentPresenter method onLoaded.
private void onLoaded(List<MapElement> mapElements, LocationMarkerView.MarkerType markerType) {
LocationMarkerView markerSelected = mapFragment.getMarkerSelected();
for (MapElement mapElement : mapElements) {
ids.add(mapElement.getId());
LocationMarkerViewOptions markerOptions = mapFragment.getMarkerOptions(markerType, mapElement.getId());
boolean selected = false;
if (markerOptions == null) {
markerOptions = new LocationMarkerViewOptions<>().relatedObject(mapElement).position(mapElement.getPosition());
if (mapFragment.getSelectedMarkerType().equals(markerType) && mapElement.getId().equals(mapFragment.getMarkerSelectedId())) {
selected = true;
mapFragment.setMarkerSelected(markerOptions.getMarker());
} else if (mapFragment.getSelectedMarkerType().equals(LocationMarkerView.MarkerType.POI) && markerSelected != null && mapElement.getId().equals(((Poi) markerSelected.getRelatedObject()).getId())) {
selected = true;
}
// the poi in edition should be hidden
if (!(markerSelected != null && mapFragment.getMapMode() == MapMode.POI_POSITION_EDITION && markerSelected.equals(markerOptions.getMarker())) && (mapElement instanceof Poi && !((Poi) mapElement).getToDelete())) {
setIcon(markerOptions, mapElement, selected);
mapFragment.addPoi(markerOptions);
}
if (markerType == LocationMarkerView.MarkerType.NOTE) {
if (mapFragment.getSelectedMarkerType().equals(LocationMarkerView.MarkerType.NOTE) && mapElement.getId().equals(mapFragment.getMarkerSelectedId())) {
mapFragment.setMarkerSelected(markerOptions.getMarker());
}
setIcon(markerOptions, mapElement, false);
mapFragment.addNote(markerOptions);
}
} else {
if (markerType == LocationMarkerView.MarkerType.POI) {
Poi poi = (Poi) mapElement;
Poi oldPoi = (Poi) markerOptions.getMarker().getRelatedObject();
oldPoi.setName(poi.getName());
oldPoi.setUpdated(poi.getUpdated());
selected = false;
if (mapFragment.getSelectedMarkerType().equals(LocationMarkerView.MarkerType.POI) && (mapElement.getId().equals(mapFragment.getMarkerSelectedId()) || markerSelected != null && mapElement.getId().equals(((Poi) markerSelected.getRelatedObject()).getId()))) {
selected = true;
}
setIcon(markerOptions, oldPoi, selected);
} else {
if (mapFragment.getSelectedMarkerType().equals(LocationMarkerView.MarkerType.NOTE) && markerSelected != null && mapElement.getId().equals(((Note) markerSelected.getRelatedObject()).getId())) {
selected = true;
}
setIcon(markerOptions, mapElement, selected);
}
// update the detail banner data
if (selected) {
if (mapFragment.getMapMode() == MapMode.DETAIL_NOTE) {
eventBus.post(new PleaseChangeValuesDetailNoteFragmentEvent((Note) mapElement));
} else {
Poi poi = (Poi) mapElement;
eventBus.post(new PleaseChangeValuesDetailPoiFragmentEvent(poi));
}
}
}
}
if ((mapFragment.getMapMode() == MapMode.DEFAULT || mapFragment.getMapMode() == MapMode.POI_CREATION)) {
mapFragment.reselectMarker();
}
if (mapFragment.getSelectedMarkerType().equals(markerType) && markerSelected == null) {
mapFragment.setMarkerSelectedId(-1L);
}
}
Aggregations