package com.mapbox.mapboxsdk.style.sources; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.DrawableRes; import android.support.annotation.Keep; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.support.v4.content.ContextCompat; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.geometry.LatLngQuad; import java.net.URL; /** * Image source, allows a georeferenced raster image to be shown on the map. *

* The georeferenced image scales and rotates as the user zooms and rotates the map. * The geographic location of the raster image content, supplied with `LatLngQuad`, * can be non-axis aligned. *

* * @see the style specification */ @UiThread public class ImageSource extends Source { /** * Internal use * * @param nativePtr - pointer to native peer */ @Keep ImageSource(long nativePtr) { super(nativePtr); } /** * Create an ImageSource from coordinates and an image URL * * @param id The source id * @param coordinates The Latitude and Longitude of the four corners of the image * @param url remote json file */ public ImageSource(String id, LatLngQuad coordinates, URL url) { super(); initialize(id, coordinates); setUrl(url); } /** * Create an ImageSource from coordinates and a bitmap image * * @param id The source id * @param coordinates The Latitude and Longitude of the four corners of the image * @param bitmap A Bitmap image */ public ImageSource(String id, LatLngQuad coordinates, @NonNull android.graphics.Bitmap bitmap) { super(); initialize(id, coordinates); setImage(bitmap); } /** * Create an ImageSource from coordinates and a bitmap image resource * * @param id The source id * @param coordinates The Latitude and Longitude of the four corners of the image * @param resourceId The resource ID of a Bitmap image */ public ImageSource(String id, LatLngQuad coordinates, @DrawableRes int resourceId) { super(); initialize(id, coordinates); setImage(resourceId); } /** * Updates the source image url * * @param url An Image url */ public void setUrl(URL url) { setUrl(url.toExternalForm()); } /** * Updates the source image url * * @param url An image url */ public void setUrl(String url) { checkThread(); nativeSetUrl(url); } /** * Updates the source image to a bitmap * * @param bitmap A Bitmap image */ public void setImage(@NonNull android.graphics.Bitmap bitmap) { checkThread(); nativeSetImage(bitmap); } /** * Updates the source image to a bitmap image resource * * @param resourceId The resource ID of a Bitmap image */ public void setImage(@DrawableRes int resourceId) throws IllegalArgumentException { checkThread(); Context context = Mapbox.getApplicationContext(); Drawable drawable = ContextCompat.getDrawable(context, resourceId); if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; nativeSetImage(bitmapDrawable.getBitmap()); } else { throw new IllegalArgumentException("Failed to decode image. The resource provided must be a Bitmap."); } } /** * @return The url or null */ @Nullable public String getUrl() { checkThread(); return nativeGetUrl(); } /** * Updates the latitude and longitude of the four corners of the image * * @param latLngQuad latitude and longitude of the four corners of the image */ public void setCoordinates(LatLngQuad latLngQuad) { checkThread(); nativeSetCoordinates(latLngQuad); } @Keep protected native void initialize(String layerId, LatLngQuad payload); @Keep protected native void nativeSetUrl(String url); @Keep protected native String nativeGetUrl(); @Keep protected native void nativeSetImage(Bitmap bitmap); @Keep protected native void nativeSetCoordinates(LatLngQuad latLngQuad); @Override @Keep protected native void finalize() throws Throwable; }