summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java')
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java373
1 files changed, 0 insertions, 373 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java
deleted file mode 100644
index e80d6fe3e1..0000000000
--- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/style/SymbolGeneratorActivity.java
+++ /dev/null
@@ -1,373 +0,0 @@
-package com.mapbox.mapboxsdk.testapp.activity.style;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.PointF;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v7.app.AppCompatActivity;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.mapbox.geojson.Feature;
-import com.mapbox.geojson.FeatureCollection;
-import com.mapbox.mapboxsdk.maps.MapView;
-import com.mapbox.mapboxsdk.maps.MapboxMap;
-import com.mapbox.mapboxsdk.maps.OnMapReadyCallback;
-import com.mapbox.mapboxsdk.maps.Style;
-import com.mapbox.mapboxsdk.style.expressions.Expression;
-import com.mapbox.mapboxsdk.style.layers.SymbolLayer;
-import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
-import com.mapbox.mapboxsdk.style.sources.Source;
-import com.mapbox.mapboxsdk.testapp.R;
-import com.mapbox.mapboxsdk.testapp.utils.ResourceUtils;
-
-import java.io.IOException;
-import java.lang.ref.WeakReference;
-import java.util.HashMap;
-import java.util.List;
-
-import timber.log.Timber;
-
-import static com.mapbox.mapboxsdk.style.expressions.Expression.concat;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.division;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.downcase;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.eq;
-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.match;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.number;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.pi;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.product;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.rgba;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.step;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.stop;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.string;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.upcase;
-import static com.mapbox.mapboxsdk.style.expressions.Expression.zoom;
-import static com.mapbox.mapboxsdk.style.layers.Property.ICON_ANCHOR_BOTTOM;
-import static com.mapbox.mapboxsdk.style.layers.Property.TEXT_ANCHOR_TOP;
-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.iconImage;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconOffset;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconOpacity;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.iconSize;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textAnchor;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textColor;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textField;
-import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.textSize;
-
-/**
- * Test activity showcasing using a symbol generator that generates Bitmaps from Android SDK Views.
- */
-public class SymbolGeneratorActivity extends AppCompatActivity implements OnMapReadyCallback {
-
- private static final String SOURCE_ID = "com.mapbox.mapboxsdk.style.layers.symbol.source.id";
- private static final String LAYER_ID = "com.mapbox.mapboxsdk.style.layers.symbol.layer.id";
- private static final String FEATURE_ID = "brk_name";
- private static final String FEATURE_RANK = "scalerank";
- private static final String FEATURE_NAME = "name_sort";
- private static final String FEATURE_TYPE = "type";
- private static final String FEATURE_REGION = "continent";
-
- private MapView mapView;
- private MapboxMap mapboxMap;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_symbol_generator);
-
- mapView = (MapView) findViewById(R.id.mapView);
- mapView.onCreate(savedInstanceState);
- mapView.getMapAsync(this);
- }
-
- @Override
- public void onMapReady(@NonNull final MapboxMap map) {
- mapboxMap = map;
- map.setStyle(Style.OUTDOORS, style -> {
- addSymbolClickListener();
- new LoadDataTask(SymbolGeneratorActivity.this).execute();
- });
- }
-
- private void addSymbolClickListener() {
- mapboxMap.addOnMapClickListener(point -> {
- PointF screenPoint = mapboxMap.getProjection().toScreenLocation(point);
- List<Feature> features = mapboxMap.queryRenderedFeatures(screenPoint, LAYER_ID);
- if (!features.isEmpty()) {
- Feature feature = features.get(0);
- // validate symbol flicker regression for #13407
- SymbolLayer layer = mapboxMap.getStyle().getLayerAs(LAYER_ID);
- layer.setProperties(iconOpacity(match(
- get(FEATURE_ID), literal(1.0f),
- stop(feature.getStringProperty(FEATURE_ID), 0.3f)
- )));
- Timber.v("Feature was clicked with data: %s", feature.toJson());
- Toast.makeText(
- SymbolGeneratorActivity.this,
- "hello from: " + feature.getStringProperty(FEATURE_NAME),
- Toast.LENGTH_LONG).show();
- }
-
- return false;
- });
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu_generator_symbol, menu);
- return super.onCreateOptionsMenu(menu);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.menu_action_icon_overlap) {
- SymbolLayer layer = mapboxMap.getStyle().getLayerAs(LAYER_ID);
- layer.setProperties(iconAllowOverlap(!layer.getIconAllowOverlap().getValue()));
- return true;
- } else if (item.getItemId() == R.id.menu_action_filter) {
- SymbolLayer layer = mapboxMap.getStyle().getLayerAs(LAYER_ID);
- layer.setFilter(eq(get(FEATURE_RANK), literal(1)));
- Timber.e("Filter that was set: %s", layer.getFilter());
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
-
- @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();
- }
-
- /**
- * Utility class to generate Bitmaps for Symbol.
- * <p>
- * Bitmaps can be added to the map with {@link com.mapbox.mapboxsdk.maps.MapboxMap#addImage(String, Bitmap)}
- * </p>
- */
- private static class SymbolGenerator {
-
- /**
- * Generate a Bitmap from an Android SDK View.
- *
- * @param view the View to be drawn to a Bitmap
- * @return the generated bitmap
- */
- public static Bitmap generate(@NonNull View view) {
- int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
- view.measure(measureSpec, measureSpec);
-
- int measuredWidth = view.getMeasuredWidth();
- int measuredHeight = view.getMeasuredHeight();
-
- view.layout(0, 0, measuredWidth, measuredHeight);
- Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888);
- bitmap.eraseColor(Color.TRANSPARENT);
- Canvas canvas = new Canvas(bitmap);
- view.draw(canvas);
- return bitmap;
- }
- }
-
- private static class LoadDataTask extends AsyncTask<Void, Void, FeatureCollection> {
-
- private WeakReference<SymbolGeneratorActivity> activity;
-
- LoadDataTask(SymbolGeneratorActivity activity) {
- this.activity = new WeakReference<>(activity);
- }
-
- @Override
- protected FeatureCollection doInBackground(Void... params) {
- Context context = activity.get();
- if (context != null) {
- try {
- // read local geojson from raw folder
- String tinyCountriesJson = ResourceUtils.readRawResource(context, R.raw.tiny_countries);
- return FeatureCollection.fromJson(tinyCountriesJson);
-
- } catch (IOException exception) {
- Timber.e(exception);
- }
- }
- return null;
- }
-
- @Override
- protected void onPostExecute(FeatureCollection featureCollection) {
- super.onPostExecute(featureCollection);
- SymbolGeneratorActivity activity = this.activity.get();
- if (featureCollection == null || activity == null) {
- return;
- }
-
- activity.onDataLoaded(featureCollection);
- }
- }
-
- public void onDataLoaded(@NonNull FeatureCollection featureCollection) {
- if (mapView.isDestroyed()) {
- return;
- }
-
- // create expressions
- Expression iconImageExpression = string(get(literal(FEATURE_ID)));
- Expression iconSizeExpression = division(number(get(literal(FEATURE_RANK))), literal(2.0f));
- Expression textSizeExpression = product(get(literal(FEATURE_RANK)), pi());
- Expression textFieldExpression = concat(upcase(literal("a ")), upcase(string(get(literal(FEATURE_TYPE)))),
- downcase(literal(" IN ")), string(get(literal(FEATURE_REGION)))
- );
- Expression textColorExpression = match(get(literal(FEATURE_RANK)),
- literal(1), rgba(255, 0, 0, 1.0f),
- literal(2), rgba(0, 0, 255.0f, 1.0f),
- rgba(0.0f, 255.0f, 0.0f, 1.0f)
- );
-
- rgba(
- division(literal(255), get(FEATURE_RANK)),
- literal(0.0f),
- literal(0.0f),
- literal(1.0f)
- );
-
- // create symbol layer
- SymbolLayer symbolLayer = new SymbolLayer(LAYER_ID, SOURCE_ID)
- .withProperties(
- // icon configuration
- iconImage(iconImageExpression),
- iconAllowOverlap(false),
- iconSize(iconSizeExpression),
- iconAnchor(ICON_ANCHOR_BOTTOM),
- iconOffset(step(zoom(), literal(new float[] {0f, 0f}),
- stop(1, new Float[] {0f, 0f}),
- stop(10, new Float[] {0f, -35f})
- )),
-
- // text field configuration
- textField(textFieldExpression),
- textSize(textSizeExpression),
- textAnchor(TEXT_ANCHOR_TOP),
- textColor(textColorExpression)
- );
-
- // add a geojson source to the map
- Source source = new GeoJsonSource(SOURCE_ID, featureCollection);
- mapboxMap.getStyle().addSource(source);
-
- // add symbol layer
- mapboxMap.getStyle().addLayer(symbolLayer);
-
- // get expressions
- Expression iconImageExpressionResult = symbolLayer.getIconImage().getExpression();
- Expression iconSizeExpressionResult = symbolLayer.getIconSize().getExpression();
- Expression textSizeExpressionResult = symbolLayer.getTextSize().getExpression();
- Expression textFieldExpressionResult = symbolLayer.getTextField().getExpression();
- Expression textColorExpressionResult = symbolLayer.getTextColor().getExpression();
-
- // log expressions
- Timber.e(iconImageExpressionResult.toString());
- Timber.e(iconSizeExpressionResult.toString());
- Timber.e(textSizeExpressionResult.toString());
- Timber.e(textFieldExpressionResult.toString());
- Timber.e(textColorExpressionResult.toString());
-
- // reset expressions
- symbolLayer.setProperties(
- iconImage(iconImageExpressionResult),
- iconSize(iconSizeExpressionResult),
- textSize(textSizeExpressionResult),
- textField(textFieldExpressionResult),
- textColor(textColorExpressionResult)
- );
-
- new GenerateSymbolTask(mapboxMap, this).execute(featureCollection);
- }
-
- private static class GenerateSymbolTask extends AsyncTask<FeatureCollection, Void, HashMap<String, Bitmap>> {
-
- private MapboxMap mapboxMap;
- private WeakReference<Context> context;
-
- GenerateSymbolTask(MapboxMap mapboxMap, Context context) {
- this.mapboxMap = mapboxMap;
- this.context = new WeakReference<>(context);
- }
-
- @SuppressWarnings("WrongThread")
- @Override
- protected HashMap<String, Bitmap> doInBackground(FeatureCollection... params) {
- HashMap<String, Bitmap> imagesMap = new HashMap<>();
- Context context = this.context.get();
- List<Feature> features = params[0].features();
- if (context != null && features != null) {
- for (Feature feature : features) {
- String countryName = feature.getStringProperty(FEATURE_ID);
- TextView textView = new TextView(context);
- textView.setBackgroundColor(context.getResources().getColor(R.color.blueAccent));
- textView.setPadding(10, 5, 10, 5);
- textView.setTextColor(Color.WHITE);
- textView.setText(countryName);
- imagesMap.put(countryName, SymbolGenerator.generate(textView));
- }
- }
- return imagesMap;
- }
-
- @Override
- protected void onPostExecute(HashMap<String, Bitmap> bitmapHashMap) {
- super.onPostExecute(bitmapHashMap);
- mapboxMap.getStyle(new Style.OnStyleLoaded() {
- @Override
- public void onStyleLoaded(@NonNull Style style) {
- style.addImagesAsync(bitmapHashMap);
- }
- });
- }
- }
-} \ No newline at end of file