summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/ImageSource.java
blob: b7679b5a169a8e4b4b2f92b2120750fef01e04ad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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();
  }

  /**
   * 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) {
    nativeSetCoordinates(latLngQuad);
  }

  protected native void initialize(String layerId, LatLngQuad payload);

  protected native void nativeSetUrl(String url);

  protected native String nativeGetUrl();

  protected native void nativeSetImage(Bitmap bitmap);

  protected native void nativeSetCoordinates(LatLngQuad latLngQuad);

  @Override
  protected native void finalize() throws Throwable;
}