[android] option to consume map clicks, consuming location clicks

This commit is contained in:
Łukasz Paczos
2018-10-26 14:41:39 +02:00
committed by Tobrun
parent 11f00c4393
commit 48bbaa6c6e
16 changed files with 74 additions and 21 deletions

View File

@@ -583,6 +583,11 @@ public final class LocationComponent {
/**
* Adds a listener that gets invoked when the user clicks the displayed location.
* <p>
* If there are registered location click listeners and the location is clicked,
* only {@link OnLocationClickListener#onLocationComponentClick()} is going to be delivered,
* {@link com.mapbox.mapboxsdk.maps.MapboxMap.OnMapClickListener#onMapClick(LatLng)} is going to be consumed
* and not pushed to the listeners registered after the component's activation.
*
* @param listener The location click listener that is invoked when the
* location is clicked
@@ -602,6 +607,11 @@ public final class LocationComponent {
/**
* Adds a listener that gets invoked when the user long clicks the displayed location.
* <p>
* If there are registered location long click listeners and the location is long clicked,
* only {@link OnLocationLongClickListener#onLocationComponentLongClick()} is going to be delivered,
* {@link com.mapbox.mapboxsdk.maps.MapboxMap.OnMapLongClickListener#onMapLongClick(LatLng)} is going to be consumed
* and not pushed to the listeners registered after the component's activation.
*
* @param listener The location click listener that is invoked when the
* location is clicked
@@ -915,23 +925,27 @@ public final class LocationComponent {
private OnMapClickListener onMapClickListener = new OnMapClickListener() {
@Override
public void onMapClick(@NonNull LatLng point) {
public boolean onMapClick(@NonNull LatLng point) {
if (!onLocationClickListeners.isEmpty() && locationLayerController.onMapClick(point)) {
for (OnLocationClickListener listener : onLocationClickListeners) {
listener.onLocationComponentClick();
}
return true;
}
return false;
}
};
private MapboxMap.OnMapLongClickListener onMapLongClickListener = new MapboxMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(@NonNull LatLng point) {
public boolean onMapLongClick(@NonNull LatLng point) {
if (!onLocationLongClickListeners.isEmpty() && locationLayerController.onMapClick(point)) {
for (OnLocationLongClickListener listener : onLocationLongClickListeners) {
listener.onLocationComponentLongClick();
}
return true;
}
return false;
}
};

View File

@@ -927,7 +927,9 @@ final class MapGestureDetector {
// new API
for (MapboxMap.OnMapClickListener listener : onMapClickListenerList) {
listener.onMapClick(projection.fromScreenLocation(tapPoint));
if (listener.onMapClick(projection.fromScreenLocation(tapPoint))) {
return;
}
}
}
@@ -939,7 +941,9 @@ final class MapGestureDetector {
// new API
for (MapboxMap.OnMapLongClickListener listener : onMapLongClickListenerList) {
listener.onMapLongClick(projection.fromScreenLocation(longClickPoint));
if (listener.onMapLongClick(projection.fromScreenLocation(longClickPoint))) {
return;
}
}
}

View File

@@ -2544,8 +2544,10 @@ public final class MapboxMap {
* Called when the user clicks on the map view.
*
* @param point The projected map coordinate the user clicked on.
* @return True if this click should be consumed and not passed further to other listeners registered afterwards,
* false otherwise.
*/
void onMapClick(@NonNull LatLng point);
boolean onMapClick(@NonNull LatLng point);
}
/**
@@ -2558,8 +2560,10 @@ public final class MapboxMap {
* Called when the user long clicks on the map view.
*
* @param point The projected map coordinate the user long clicked on.
* @return True if this click should be consumed and not passed further to other listeners registered afterwards,
* false otherwise.
*/
void onMapLongClick(@NonNull LatLng point);
boolean onMapLongClick(@NonNull LatLng point);
}
/**

View File

@@ -43,9 +43,15 @@ public class PressForMarkerActivity extends AppCompatActivity {
mapboxMap = map;
resetMap();
mapboxMap.addOnMapLongClickListener(point -> addMarker(point));
mapboxMap.addOnMapLongClickListener(point -> {
addMarker(point);
return false;
});
mapboxMap.addOnMapClickListener(point -> addMarker(point));
mapboxMap.addOnMapClickListener(point -> {
addMarker(point);
return false;
});
if (savedInstanceState != null) {
markerList = savedInstanceState.getParcelableArrayList(STATE_MARKER_LIST);

View File

@@ -64,8 +64,9 @@ public class CameraPositionActivity extends FragmentActivity implements OnMapRea
}
@Override
public void onMapLongClick(@NonNull LatLng point) {
public boolean onMapLongClick(@NonNull LatLng point) {
toggleLogCameraChanges();
return false;
}
@Override

View File

@@ -35,7 +35,10 @@ public class MaxMinZoomActivity extends AppCompatActivity implements OnMapReadyC
mapboxMap = map;
mapboxMap.setMinZoomPreference(3);
mapboxMap.setMaxZoomPreference(5);
mapboxMap.setOnMapClickListener(point -> map.setStyle(Style.OUTDOORS, style -> Timber.d("Style Loaded %s", style)));
mapboxMap.setOnMapClickListener(point -> {
map.setStyle(Style.OUTDOORS, style -> Timber.d("Style Loaded %s", style));
return false;
});
}
@Override

View File

@@ -71,6 +71,8 @@ public class QueryRenderedFeaturesPropertiesActivity extends AppCompatActivity {
// Add a marker on the clicked point
marker = mapboxMap.addMarker(new CustomMarkerOptions().position(point).features(features));
mapboxMap.selectMarker(marker);
return false;
});
});

View File

@@ -63,6 +63,8 @@ public class QuerySourceFeaturesActivity extends AppCompatActivity {
List<Feature> features = source.querySourceFeatures(eq(get("key1"), literal("value1")));
Toast.makeText(QuerySourceFeaturesActivity.this, String.format("Found %s features",
features.size()), Toast.LENGTH_SHORT).show();
return false;
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

View File

@@ -71,6 +71,8 @@ public class DynamicInfoWindowAdapterActivity extends AppCompatActivity implemen
infoWindow.update();
});
}
return false;
});
// Focus on Paris

View File

@@ -109,7 +109,7 @@ public class InfoWindowActivity extends AppCompatActivity
}
@Override
public void onMapLongClick(@NonNull LatLng point) {
public boolean onMapLongClick(@NonNull LatLng point) {
if (customMarker != null) {
// Remove previous added marker
mapboxMap.removeAnnotation(customMarker);
@@ -122,6 +122,8 @@ public class InfoWindowActivity extends AppCompatActivity
.snippet(new DecimalFormat("#.#####").format(point.getLatitude()) + ", "
+ new DecimalFormat("#.#####").format(point.getLongitude()))
.position(point));
return false;
}
@Override

View File

@@ -5,16 +5,15 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
import com.mapbox.android.core.permissions.PermissionsListener;
import com.mapbox.android.core.permissions.PermissionsManager;
import com.mapbox.mapboxsdk.location.LocationComponent;
import com.mapbox.mapboxsdk.location.modes.RenderMode;
import com.mapbox.mapboxsdk.maps.MapView;
import com.mapbox.mapboxsdk.maps.MapboxMap;
import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
import com.mapbox.mapboxsdk.location.LocationComponent;
import com.mapbox.mapboxsdk.location.modes.RenderMode;
import com.mapbox.mapboxsdk.testapp.R;
import java.util.List;
@@ -33,12 +32,9 @@ public class LocationMapChangeActivity extends AppCompatActivity implements OnMa
mapView = findViewById(R.id.mapView);
FloatingActionButton stylesFab = findViewById(R.id.fabStyles);
stylesFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mapboxMap != null) {
mapboxMap.setStyleUrl(Utils.getNextStyle());
}
stylesFab.setOnClickListener(v -> {
if (mapboxMap != null) {
mapboxMap.setStyleUrl(Utils.getNextStyle());
}
});
@@ -86,6 +82,12 @@ public class LocationMapChangeActivity extends AppCompatActivity implements OnMa
locationComponent.activateLocationComponent(this);
locationComponent.setLocationComponentEnabled(true);
locationComponent.setRenderMode(RenderMode.COMPASS);
locationComponent.addOnLocationClickListener(
() -> Toast.makeText(this, "Location clicked", Toast.LENGTH_SHORT).show());
locationComponent.addOnLocationLongClickListener(
() -> Toast.makeText(this, "Location long clicked", Toast.LENGTH_SHORT).show());
}
@Override

View File

@@ -101,6 +101,8 @@ public class DoubleMapActivity extends AppCompatActivity {
// test if we can open 2 activities after each other
Toast.makeText(mapViewMini.getContext(), "Creating a new Activity instance",Toast.LENGTH_SHORT).show();
startActivity(new Intent(mapViewMini.getContext(), DoubleMapActivity.class));
return false;
});
});
}

View File

@@ -95,6 +95,8 @@ class DraggableMarkerActivity : AppCompatActivity() {
Snackbar.LENGTH_LONG)
.show()
}
false
}
draggableSymbolsManager = DraggableSymbolsManager(
@@ -185,6 +187,7 @@ class DraggableMarkerActivity : AppCompatActivity() {
onSymbolDragStarted(id)
}
}
false
}
androidGesturesManager.setMoveGestureListener(MyMoveGestureListener())

View File

@@ -105,6 +105,8 @@ public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapR
"hello from: " + feature.getStringProperty(FEATURE_NAME),
Toast.LENGTH_LONG).show();
}
return false;
});
}

View File

@@ -148,7 +148,7 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap.
}
@Override
public void onMapClick(@NonNull LatLng point) {
public boolean onMapClick(@NonNull LatLng point) {
// Query which features are clicked
PointF screenLoc = mapboxMap.getProjection().toScreenLocation(point);
List<Feature> features = mapboxMap.queryRenderedFeatures(screenLoc, MARKER_LAYER);
@@ -162,6 +162,8 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap.
}
geoJsonSource.setGeoJson(markerCollection);
}
return false;
}
private void toggleTextSize() {

View File

@@ -125,6 +125,8 @@ public class ZoomFunctionSymbolLayerActivity extends AppCompatActivity {
} else {
Timber.e("No features found");
}
return false;
});
}