From 0f18c0ce790a8d252f737385cd3599e6ac0e1ecd Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 25 Sep 2018 11:30:59 +0200 Subject: [android] - add selected state paradigm to SymbolLayerActivity [android] - update Circle layer activity with cluster configuration --- .../activity/style/SymbolLayerActivity.java | 33 ++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java') diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java index c62eef20f4..acdb1d216d 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolLayerActivity.java @@ -30,6 +30,9 @@ import com.mapbox.mapboxsdk.utils.BitmapUtils; import java.util.List; import static com.mapbox.mapboxsdk.style.expressions.Expression.get; +import static com.mapbox.mapboxsdk.style.expressions.Expression.literal; +import static com.mapbox.mapboxsdk.style.expressions.Expression.switchCase; +import static com.mapbox.mapboxsdk.style.expressions.Expression.toBool; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAllowOverlap; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconAnchor; import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconColor; @@ -55,7 +58,11 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. private static final String MARKER_SOURCE = "marker-source"; private static final String MARKER_LAYER = "marker-layer"; private static final String MARKER_ICON = "my-layers-image"; + public static final String SELECTED_FEATURE_PROPERTY = "selected"; + public static final String TITLE_FEATURE_PROPERTY = "title"; + private GeoJsonSource geoJsonSource; + private FeatureCollection markerCollection; private MapboxMap mapboxMap; private MapView mapView; private boolean initialFont; @@ -95,11 +102,11 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. ); // Add a source - FeatureCollection markers = FeatureCollection.fromFeatures(new Feature[] { + markerCollection = FeatureCollection.fromFeatures(new Feature[] { Feature.fromGeometry(Point.fromLngLat(4.91638, 52.35673), featureProperties("Marker 1")), Feature.fromGeometry(Point.fromLngLat(4.91638, 52.34673), featureProperties("Marker 2")) }); - mapboxMap.addSource(new GeoJsonSource(MARKER_SOURCE, markers)); + mapboxMap.addSource(geoJsonSource = new GeoJsonSource(MARKER_SOURCE, markerCollection)); // Add the symbol-layer mapboxMap.addLayer( @@ -108,9 +115,10 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. iconImage(MARKER_ICON), iconIgnorePlacement(true), iconAllowOverlap(true), + iconSize(switchCase(toBool(get(SELECTED_FEATURE_PROPERTY)), literal(3.0f), literal(1.0f))), iconAnchor(Property.ICON_ANCHOR_BOTTOM), iconColor(Color.RED), - textField(get("title")), + textField(get(TITLE_FEATURE_PROPERTY)), textFont(new String[] {"DIN Offc Pro Regular", "Arial Unicode MS Regular"}), textColor(Color.RED), textAllowOverlap(true), @@ -129,13 +137,15 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. // Query which features are clicked PointF screenLoc = mapboxMap.getProjection().toScreenLocation(point); List features = mapboxMap.queryRenderedFeatures(screenLoc, MARKER_LAYER); - - SymbolLayer layer = mapboxMap.getLayerAs(MARKER_LAYER); - if (features.size() == 0) { - // Reset - layer.setProperties(iconSize(1f)); - } else { - layer.setProperties(iconSize(3f)); + if (!features.isEmpty()) { + for (Feature feature : markerCollection.features()) { + if (feature.getStringProperty(TITLE_FEATURE_PROPERTY) + .equals(features.get(0).getStringProperty(TITLE_FEATURE_PROPERTY))) { + boolean selected = feature.getBooleanProperty(SELECTED_FEATURE_PROPERTY); + feature.addBooleanProperty(SELECTED_FEATURE_PROPERTY, !selected); + } + } + geoJsonSource.setGeoJson(markerCollection); } } @@ -161,7 +171,8 @@ public class SymbolLayerActivity extends AppCompatActivity implements MapboxMap. private JsonObject featureProperties(String title) { JsonObject object = new JsonObject(); - object.add("title", new JsonPrimitive(title)); + object.add(TITLE_FEATURE_PROPERTY, new JsonPrimitive(title)); + object.add(SELECTED_FEATURE_PROPERTY, new JsonPrimitive(false)); return object; } -- cgit v1.2.1