From 2656b5c733a7c7a18f81c80518e4bfef75b03582 Mon Sep 17 00:00:00 2001 From: Tobrun Date: Wed, 27 Apr 2016 12:34:39 +0200 Subject: [PATCH] [android] #4850 - add non-gl content to snapshot bitmap --- .../com/mapbox/mapboxsdk/maps/MapView.java | 18 ++++++++++++------ .../imagegenerator/SnapshotActivity.java | 1 - .../src/main/res/layout/activity_snapshot.xml | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 02dc10ad4..8aa8eccf5 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -16,6 +16,7 @@ import android.content.pm.ServiceInfo; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Matrix; import android.graphics.PointF; import android.graphics.RectF; import android.graphics.SurfaceTexture; @@ -2542,13 +2543,18 @@ public class MapView extends FrameLayout { @UiThread void snapshot(@NonNull final MapboxMap.SnapshotReadyCallback callback, @Nullable final Bitmap bitmap) { - final TextureView textureView = (TextureView) findViewById(R.id.textureView); + TextureView textureView = (TextureView) findViewById(R.id.textureView); final boolean canUseBitmap = bitmap != null && textureView.getWidth() == bitmap.getWidth() && textureView.getHeight() == bitmap.getHeight(); - if (canUseBitmap) { - callback.onSnapshotReady(textureView.getBitmap(bitmap)); - } else { - callback.onSnapshotReady(textureView.getBitmap()); - } + + setDrawingCacheEnabled(true); + Bitmap content = Bitmap.createBitmap(getDrawingCache()); + setDrawingCacheEnabled(false); + + Bitmap output = Bitmap.createBitmap(content.getWidth(), content.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(output); + canvas.drawBitmap(canUseBitmap ? textureView.getBitmap(bitmap) : textureView.getBitmap(), 0, 0, null); + canvas.drawBitmap(content, new Matrix(), null); + callback.onSnapshotReady(output); } // diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java index 991c5cd50..93ebdcd15 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/activity/imagegenerator/SnapshotActivity.java @@ -37,7 +37,6 @@ public class SnapshotActivity extends AppCompatActivity { } mapView = (MapView) findViewById(R.id.mapView); - mapView.setAccessToken(getString(R.string.mapbox_access_token)); mapView.onCreate(savedInstanceState); mapView.getMapAsync(new OnMapReadyCallback() { @Override diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml index b9701b53e..23191e2df 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/layout/activity_snapshot.xml @@ -30,6 +30,7 @@ android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" + app:access_token="@string/mapbox_access_token" app:style_url="@string/style_emerald" />