summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorLeith Bade <leith@mapbox.com>2015-10-23 16:30:29 +1100
committerLeith Bade <leith@mapbox.com>2015-10-23 17:06:20 +1100
commit267e33ba5a79358c44ab7cd9513e88f3646ca517 (patch)
tree552f56b8519f1b6ffe5b6b71c9cd7369b3390d94 /android
parent54762825b0585fd771b4bf198d85c5d67e92bf68 (diff)
downloadqtlocation-mapboxgl-267e33ba5a79358c44ab7cd9513e88f3646ca517.tar.gz
[android] Add SpriteFactory.drawable for custom markers
Used in InfoWindowAdapter activity Fixes #2744
Diffstat (limited to 'android')
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java12
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java28
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/InfoWindowAdapterActivity.java15
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-hdpi/ic_location_city_black_48dp.pngbin0 -> 172 bytes
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/ic_location_city_black_48dp.pngbin0 -> 147 bytes
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xhdpi/ic_location_city_black_48dp.pngbin0 -> 190 bytes
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxhdpi/ic_location_city_black_48dp.pngbin0 -> 230 bytes
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxxhdpi/ic_location_city_black_48dp.pngbin0 -> 255 bytes
8 files changed, 47 insertions, 8 deletions
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java
index ec733510b5..a83079ac41 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Annotation.java
@@ -4,8 +4,6 @@ import android.support.annotation.NonNull;
import com.mapbox.mapboxsdk.views.MapView;
-import java.lang.ref.WeakReference;
-
public abstract class Annotation implements Comparable<Annotation> {
/**
@@ -14,7 +12,7 @@ public abstract class Annotation implements Comparable<Annotation> {
* Internal C++ id is stored as unsigned int.
*/
private long id = -1; // -1 unless added to a MapView
- private WeakReference<MapView> mapView;
+ private MapView mapView;
protected Annotation() {
}
@@ -27,10 +25,10 @@ public abstract class Annotation implements Comparable<Annotation> {
}
public void remove() {
- if ((mapView == null) || (mapView.get() == null)) {
+ if (mapView == null) {
return;
}
- mapView.get().removeAnnotation(this);
+ mapView.removeAnnotation(this);
}
/**
@@ -44,14 +42,14 @@ public abstract class Annotation implements Comparable<Annotation> {
* Do not use this method. Used internally by the SDK.
*/
public void setMapView(MapView mapView) {
- this.mapView = new WeakReference<>(mapView);
+ this.mapView = mapView;
}
protected MapView getMapView() {
if (mapView == null) {
return null;
}
- return mapView.get();
+ return mapView;
}
@Override
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java
index ae07050ef6..78f7673f89 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/SpriteFactory.java
@@ -3,6 +3,9 @@ package com.mapbox.mapboxsdk.annotations;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.DisplayMetrics;
import android.view.WindowManager;
@@ -20,7 +23,6 @@ public final class SpriteFactory {
private static final String SPRITE_ID_PREFIX = "com.mapbox.sprites.sprite_";
- // TODO make weak
private MapView mMapView;
private Sprite mDefaultMarker;
private BitmapFactory.Options mOptions;
@@ -62,6 +64,30 @@ public final class SpriteFactory {
return new Sprite(id, bitmap);
}
+ public Sprite fromDrawable(Drawable drawable) {
+ int width = drawable.getIntrinsicWidth();
+ int height = drawable.getIntrinsicHeight();
+
+ return fromDrawable(drawable, width, height);
+ }
+
+
+ public Sprite fromDrawable(Drawable drawable, int width, int height) {
+ if ((width < 0) || (height < 0)) {
+ return null;
+ }
+
+ Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+ Rect temp = drawable.getBounds();
+ Rect bounds = new Rect(0, 0, width, height);
+ drawable.setBounds(bounds);
+ drawable.draw(canvas);
+ drawable.setBounds(temp);
+
+ return fromBitmap(bitmap);
+ }
+
public Sprite fromResource(int resourceId) {
Bitmap bitmap = BitmapFactory.decodeResource(mMapView.getResources(), resourceId);
return fromBitmap(bitmap);
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/InfoWindowAdapterActivity.java b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/InfoWindowAdapterActivity.java
index 62292811d5..0a489edaa1 100644
--- a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/InfoWindowAdapterActivity.java
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/InfoWindowAdapterActivity.java
@@ -1,8 +1,11 @@
package com.mapbox.mapboxsdk.testapp;
import android.graphics.Color;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
@@ -12,6 +15,8 @@ import android.widget.TextView;
import com.mapbox.mapboxsdk.annotations.Marker;
import com.mapbox.mapboxsdk.annotations.MarkerOptions;
+import com.mapbox.mapboxsdk.annotations.Sprite;
+import com.mapbox.mapboxsdk.annotations.SpriteFactory;
import com.mapbox.mapboxsdk.constants.Style;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.utils.ApiAccess;
@@ -20,6 +25,8 @@ import com.mapbox.mapboxsdk.views.MapView;
public class InfoWindowAdapterActivity extends AppCompatActivity {
private MapView mMapView;
+ private SpriteFactory mSpriteFactory;
+ private Drawable mIconDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -38,6 +45,10 @@ public class InfoWindowAdapterActivity extends AppCompatActivity {
mMapView = (MapView) findViewById(R.id.mapView);
mMapView.setAccessToken(ApiAccess.getToken(this));
mMapView.onCreate(savedInstanceState);
+
+ mSpriteFactory = new SpriteFactory(mMapView);
+ mIconDrawable = ContextCompat.getDrawable(this, R.drawable.ic_location_city_black_48dp);
+
mMapView.setInfoWindowAdapter(new MapView.InfoWindowAdapter() {
private int tenDp = (int) getResources().getDimension(R.dimen.attr_margin);
@@ -66,6 +77,10 @@ public class InfoWindowAdapterActivity extends AppCompatActivity {
marker.title(title);
marker.snippet(color);
marker.position(new LatLng(lat, lng));
+
+ mIconDrawable.setColorFilter(Color.parseColor(marker.getSnippet()), PorterDuff.Mode.SRC_IN);
+ Sprite icon = mSpriteFactory.fromDrawable(mIconDrawable);
+ marker.icon(icon);
return marker;
}
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-hdpi/ic_location_city_black_48dp.png b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-hdpi/ic_location_city_black_48dp.png
new file mode 100644
index 0000000000..c542d2aa76
--- /dev/null
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-hdpi/ic_location_city_black_48dp.png
Binary files differ
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/ic_location_city_black_48dp.png b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/ic_location_city_black_48dp.png
new file mode 100644
index 0000000000..06853dd255
--- /dev/null
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-mdpi/ic_location_city_black_48dp.png
Binary files differ
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xhdpi/ic_location_city_black_48dp.png b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xhdpi/ic_location_city_black_48dp.png
new file mode 100644
index 0000000000..5b5fd9a19d
--- /dev/null
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xhdpi/ic_location_city_black_48dp.png
Binary files differ
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxhdpi/ic_location_city_black_48dp.png b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxhdpi/ic_location_city_black_48dp.png
new file mode 100644
index 0000000000..0b2b64745d
--- /dev/null
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxhdpi/ic_location_city_black_48dp.png
Binary files differ
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxxhdpi/ic_location_city_black_48dp.png b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxxhdpi/ic_location_city_black_48dp.png
new file mode 100644
index 0000000000..f9654a9a67
--- /dev/null
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/res/drawable-xxxhdpi/ic_location_city_black_48dp.png
Binary files differ