[android] Add ImageSource bindings
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
package com.mapbox.mapboxsdk.geometry;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
/**
|
||||
* A geographical area representing a non-aligned quadrilateral
|
||||
* <p>
|
||||
* This class does not wrap values to the world bounds
|
||||
* </p>
|
||||
*/
|
||||
public class LatLngQuad implements Parcelable {
|
||||
|
||||
private final LatLng topLeft;
|
||||
private final LatLng topRight;
|
||||
private final LatLng bottomRight;
|
||||
private final LatLng bottomLeft;
|
||||
|
||||
/**
|
||||
* Construct a new LatLngQuad based on its corners,
|
||||
* in order top left, top right, bottom left, bottom right
|
||||
*/
|
||||
public LatLngQuad(final LatLng topLeft, final LatLng topRight, final LatLng bottomRight, final LatLng bottomLeft) {
|
||||
this.topLeft = topLeft;
|
||||
this.topRight = topRight;
|
||||
this.bottomRight = bottomRight;
|
||||
this.bottomLeft = bottomLeft;
|
||||
}
|
||||
|
||||
public LatLng getTopLeft() {
|
||||
return this.topLeft;
|
||||
}
|
||||
|
||||
public LatLng getTopRight() {
|
||||
return this.topRight;
|
||||
}
|
||||
|
||||
public LatLng getBottomRight() {
|
||||
return this.bottomRight;
|
||||
}
|
||||
|
||||
public LatLng getBottomLeft() {
|
||||
return this.bottomLeft;
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<LatLngQuad> CREATOR = new Parcelable.Creator<LatLngQuad>() {
|
||||
@Override
|
||||
public LatLngQuad createFromParcel(final Parcel in) {
|
||||
return readFromParcel(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LatLngQuad[] newArray(final int size) {
|
||||
return new LatLngQuad[size];
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int code = topLeft.hashCode();
|
||||
code = (code ^ code >>> 31) + topRight.hashCode();
|
||||
code = (code ^ code >>> 31) + bottomRight.hashCode();
|
||||
code = (code ^ code >>> 31) + bottomLeft.hashCode();
|
||||
return code;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(final Parcel out, final int arg1) {
|
||||
topLeft.writeToParcel(out, arg1);
|
||||
topRight.writeToParcel(out, arg1);
|
||||
bottomRight.writeToParcel(out, arg1);
|
||||
bottomLeft.writeToParcel(out, arg1);
|
||||
}
|
||||
|
||||
private static LatLngQuad readFromParcel(final Parcel in) {
|
||||
final LatLng topLeft = new LatLng(in);
|
||||
final LatLng topRight = new LatLng(in);
|
||||
final LatLng bottomRight = new LatLng(in);
|
||||
final LatLng bottomLeft = new LatLng(in);
|
||||
return new LatLngQuad(topLeft, topRight, bottomRight, bottomLeft);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
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.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.
|
||||
* <p>
|
||||
* 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.
|
||||
* </p>
|
||||
* * @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#sources-image">the style specification</a>
|
||||
*/
|
||||
@UiThread
|
||||
public class ImageSource extends Source {
|
||||
|
||||
/**
|
||||
* Internal use
|
||||
*
|
||||
* @param nativePtr - pointer to native peer
|
||||
*/
|
||||
public 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) {
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
nativeSetUrl(url);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the source image to a bitmap
|
||||
*
|
||||
* @param bitmap A Bitmap image
|
||||
*/
|
||||
public void setImage(@NonNull android.graphics.Bitmap bitmap) {
|
||||
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 {
|
||||
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() {
|
||||
return nativeGetUrl();
|
||||
}
|
||||
|
||||
protected native void initialize(String layerId, LatLngQuad payload);
|
||||
|
||||
protected native void nativeSetUrl(String url);
|
||||
|
||||
protected native String nativeGetUrl();
|
||||
|
||||
protected native void nativeSetImage(Bitmap bitmap);
|
||||
|
||||
@Override
|
||||
protected native void finalize() throws Throwable;
|
||||
}
|
||||
Reference in New Issue
Block a user