diff options
author | tobrun <tobrun.van.nuland@gmail.com> | 2018-08-13 11:40:54 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-08-23 19:01:40 +0300 |
commit | fc26f2a6caadbc4c91f3624b62a635d05f9c4aab (patch) | |
tree | 5ae6c72e5b55f82efa4eeecab57402225d6dbf80 | |
parent | fb5afd34b9b25e993a4b109385215eba0b83923f (diff) | |
download | qtlocation-mapboxgl-fc26f2a6caadbc4c91f3624b62a635d05f9c4aab.tar.gz |
[android] - add line-gradient example, integrate lineProgress expression
8 files changed, 216 insertions, 1 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java index bd4d5d7d4b..626d83d299 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java @@ -1462,6 +1462,32 @@ public class Expression { } /** + * Gets the progress along a gradient line. Can only be used in the line-gradient property. + * <p> + * Example usage: + * </p> + * <pre> + * {@code + * LineLayer layer = new LineLayer("layer-id", "source-id"); + * layer.setProperties( + * lineGradient(interpolate( + * linear(), lineProgress(), + * stop(0f, rgb(0, 0, 255)), + * stop(0.5f, rgb(0, 255, 0)), + * stop(1f, rgb(255, 0, 0))) + * ) + * ) + * } + * </pre> + * + * @return expression + * @see <a href="https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-line-progress">Style specification</a> + */ + public static Expression lineProgress() { + return new Expression("line-progress"); + } + + /** * Retrieves an item from an array. * * @param number the index expression diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonOptions.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonOptions.java index 6961027338..00715bc213 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonOptions.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/GeoJsonOptions.java @@ -45,6 +45,17 @@ public class GeoJsonOptions extends HashMap<String, Object> { } /** + * Initialises whether to calculate line distance metrics. + * + * @param lineMetrics true to calculate line distance metrics. + * @return the current instance for chaining + */ + public GeoJsonOptions withLineMetrics(boolean lineMetrics) { + this.put("lineMetrics", lineMetrics); + return this; + } + + /** * Douglas-Peucker simplification tolerance (higher means simpler geometries and faster performance). * * @param tolerance the tolerance - Defaults to 0.375 @@ -88,5 +99,4 @@ public class GeoJsonOptions extends HashMap<String, Object> { this.put("clusterRadius", clusterRadius); return this; } - } diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml index c87e9d09bf..e23b1d64f3 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/AndroidManifest.xml @@ -433,6 +433,17 @@ android:value=".activity.FeatureOverviewActivity" /> </activity> <activity + android:name=".activity.style.GradientLineActivity" + android:description="@string/description_gradient_line" + android:label="@string/activity_gradient_line"> + <meta-data + android:name="@string/category" + android:value="@string/category_style" /> + <meta-data + android:name="android.support.PARENT_ACTIVITY" + android:value=".activity.FeatureOverviewActivity" /> + </activity> + <activity android:name=".activity.style.DataDrivenStyleActivity" android:description="@string/description_data_driven_style" android:label="@string/activity_data_driven_style"> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GradientLineActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GradientLineActivity.java new file mode 100644 index 0000000000..f980976bf9 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/GradientLineActivity.java @@ -0,0 +1,117 @@ +package com.mapbox.mapboxsdk.testapp.activity.style; + +import android.graphics.Color; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import com.mapbox.mapboxsdk.maps.MapView; +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.maps.OnMapReadyCallback; +import com.mapbox.mapboxsdk.style.layers.LineLayer; +import com.mapbox.mapboxsdk.style.sources.GeoJsonOptions; +import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils; +import timber.log.Timber; + +import java.io.IOException; + +import static com.mapbox.mapboxsdk.style.expressions.Expression.interpolate; +import static com.mapbox.mapboxsdk.style.expressions.Expression.lineProgress; +import static com.mapbox.mapboxsdk.style.expressions.Expression.linear; +import static com.mapbox.mapboxsdk.style.expressions.Expression.rgb; +import static com.mapbox.mapboxsdk.style.expressions.Expression.stop; +import static com.mapbox.mapboxsdk.style.layers.Property.LINE_CAP_ROUND; +import static com.mapbox.mapboxsdk.style.layers.Property.LINE_JOIN_ROUND; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineCap; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineColor; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineGradient; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineJoin; +import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.lineWidth; + +/** + * Activity showcasing applying a gradient coloring to a line layer. + */ +public class GradientLineActivity extends AppCompatActivity implements OnMapReadyCallback { + + public static final String LINE_SOURCE = "gradient"; + private MapboxMap mapboxMap; + private MapView mapView; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_gradient_line); + + mapView = findViewById(R.id.mapView); + mapView.onCreate(savedInstanceState); + mapView.getMapAsync(this); + } + + @Override + public void onMapReady(MapboxMap map) { + this.mapboxMap = map; + + try { + String geoJson = ResourceUtils.readRawResource(GradientLineActivity.this, R.raw.test_line_gradient_feature); + mapboxMap.addSource(new GeoJsonSource(LINE_SOURCE, geoJson, new GeoJsonOptions().withLineMetrics(true))); + mapboxMap.addLayer(new LineLayer("gradient", LINE_SOURCE) + .withProperties( + lineGradient(interpolate( + linear(), lineProgress(), + stop(0f, rgb(0, 0, 255)), + stop(0.5f, rgb(0, 255, 0)), + stop(1f, rgb(255, 0, 0))) + ), + lineColor(Color.RED), + lineWidth(10.0f), + lineCap(LINE_CAP_ROUND), + lineJoin(LINE_JOIN_ROUND) + ) + ); + } catch (IOException exception) { + Timber.e(exception); + } + } + + @Override + protected void onStart() { + super.onStart(); + mapView.onStart(); + } + + @Override + protected void onResume() { + super.onResume(); + mapView.onResume(); + } + + @Override + protected void onPause() { + super.onPause(); + mapView.onPause(); + } + + @Override + protected void onStop() { + super.onStop(); + mapView.onStop(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + mapView.onSaveInstanceState(outState); + } + + @Override + public void onLowMemory() { + super.onLowMemory(); + mapView.onLowMemory(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + mapView.onDestroy(); + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_gradient_line.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_gradient_line.xml new file mode 100644 index 0000000000..e5db4b63df --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_gradient_line.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<com.mapbox.mapboxsdk.maps.MapView + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@id/mapView" + android:layout_width="match_parent" + android:layout_height="match_parent" + app:mapbox_cameraTargetLat="45.38301927899065" + app:mapbox_cameraTargetLng="8.63525390625" + app:mapbox_cameraZoom="7" + app:mapbox_styleUrl="@string/mapbox_style_mapbox_streets"/> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_gradient_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_gradient_feature.geojson new file mode 100644 index 0000000000..3525259cba --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_gradient_feature.geojson @@ -0,0 +1,38 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 9.38507080078125, + 46.16936992120204 + ], + [ + 9.07196044921875, + 45.81540082150529 + ], + [ + 9.3878173828125, + 45.85271700071619 + ], + [ + 9.2010498046875, + 45.46783598133375 + ], + [ + 8.876953125, + 44.422011314236634 + ], + [ + 7.635498046875, + 45.07352060670971 + ] + ] + } + } + ] +}
\ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml index bb4e0cfe6d..6c68edc4d2 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/descriptions.xml @@ -29,6 +29,7 @@ <string name="description_dynamic_info_window_adapter">Learn how to create a dynamic custom InfoWindow</string> <string name="description_viewpager">Use SupportMapFragments in a ViewPager</string> <string name="description_runtime_style">Adopt the map style on the fly</string> + <string name="description_gradient_line">Show a gradient line layer from a geojson source</string> <string name="description_data_driven_style">Use functions to change the map appearance</string> <string name="description_symbol_layer">Manipulate symbols at runtime</string> <string name="description_custom_sprite">Use a custom sprite in a Symbol Layer</string> diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml index 736c33fe34..ddf3518863 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/values/titles.xml @@ -30,6 +30,7 @@ <string name="activity_minmax_zoom">Min/Max Zoom</string> <string name="activity_viewpager">ViewPager</string> <string name="activity_runtime_style">Runtime Style</string> + <string name="activity_gradient_line">Gradient line layer</string> <string name="activity_data_driven_style">Data Driven Style</string> <string name="activity_circle_layer">Circle layer</string> <string name="activity_style_file">Local Style file</string> |