diff options
author | Tobrun <tobrun@mapbox.com> | 2017-06-14 14:34:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-14 14:34:03 +0200 |
commit | 7bfcce02662a9c429c3ac715728de63e2850231e (patch) | |
tree | 6da7257a0510d92cd8555c6678cc3772391890c5 /platform | |
parent | 0c275ad6fa8d2c1e2523b6df7696d6fb09587411 (diff) | |
download | qtlocation-mapboxgl-7bfcce02662a9c429c3ac715728de63e2850231e.tar.gz |
Cherry pick release (#9263)
* [core] - bump earcut version dependency to handle unused lamba warning (#9242)
* [android] - snapshot bitmap contains view based content (#9252)
Diffstat (limited to 'platform')
2 files changed, 45 insertions, 4 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java index a31babc1c5..af3b57151d 100755 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/NativeMapView.java @@ -29,6 +29,7 @@ import com.mapbox.mapboxsdk.style.layers.Layer; import com.mapbox.mapboxsdk.style.light.Light; import com.mapbox.mapboxsdk.style.sources.CannotAddSourceException; import com.mapbox.mapboxsdk.style.sources.Source; +import com.mapbox.mapboxsdk.utils.BitmapUtils; import com.mapbox.services.commons.geojson.Feature; import java.nio.ByteBuffer; @@ -39,7 +40,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import timber.log.Timber; - // Class that wraps the native methods for convenience final class NativeMapView { @@ -920,12 +920,20 @@ final class NativeMapView { } protected void onFpsChanged(double fps) { + if (isDestroyedOn("OnFpsChanged")) { + return; + } mapView.onFpsChanged(fps); } - protected void onSnapshotReady(Bitmap bitmap) { - if (snapshotReadyCallback != null && bitmap != null) { - snapshotReadyCallback.onSnapshotReady(bitmap); + protected void onSnapshotReady(Bitmap mapContent) { + if (isDestroyedOn("OnSnapshotReady")) { + return; + } + + Bitmap viewContent = BitmapUtils.createBitmapFromView(mapView); + if (snapshotReadyCallback != null && mapContent != null && viewContent != null) { + snapshotReadyCallback.onSnapshotReady(BitmapUtils.mergeBitmap(mapContent, viewContent)); } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/BitmapUtils.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/BitmapUtils.java new file mode 100644 index 0000000000..e3fc765734 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/utils/BitmapUtils.java @@ -0,0 +1,33 @@ +package com.mapbox.mapboxsdk.utils; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.support.annotation.NonNull; +import android.view.View; + +public class BitmapUtils { + + public static Bitmap createBitmapFromView(@NonNull View view) { + view.setDrawingCacheEnabled(true); + view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_LOW); + view.buildDrawingCache(); + + if (view.getDrawingCache() == null) { + return null; + } + + Bitmap snapshot = Bitmap.createBitmap(view.getDrawingCache()); + view.setDrawingCacheEnabled(false); + view.destroyDrawingCache(); + return snapshot; + } + + public static Bitmap mergeBitmap(@NonNull Bitmap background, @NonNull Bitmap foreground) { + Bitmap result = Bitmap.createBitmap(background.getWidth(), background.getHeight(), background.getConfig()); + Canvas canvas = new Canvas(result); + canvas.drawBitmap(background, 0f, 0f, null); + canvas.drawBitmap(foreground, 10, 10, null); + return result; + } + +} |