summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorBrad Leege <bleege@gmail.com>2015-09-08 14:46:18 -0500
committerJustin R. Miller <incanus@codesorcery.net>2015-09-11 15:09:22 -0700
commit0da95e17c37e1b283074bc0e4f7293c7a0f2076e (patch)
treecb9a09608b5ad8f58a842dbca73c35371e1db77f /android
parent038f2f5ea3073b0294adf97fcf26bd8ff20a80f5 (diff)
downloadqtlocation-mapboxgl-0da95e17c37e1b283074bc0e4f7293c7a0f2076e.tar.gz
#2283 - Supporting custom InfoWindow touch listeners via Marker.setInfoWindowOnTouchListener(). Added Test to Custom Annotations in TestApp's MainActivity.
Diffstat (limited to 'android')
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/annotations/Marker.java28
-rw-r--r--android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java16
-rw-r--r--android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxgl/testapp/MainActivity.java12
3 files changed, 46 insertions, 10 deletions
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/annotations/Marker.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/annotations/Marker.java
index 4776c37bf3..17317bffb2 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/annotations/Marker.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/annotations/Marker.java
@@ -1,6 +1,7 @@
package com.mapbox.mapboxgl.annotations;
import android.graphics.Point;
+import android.view.View;
import com.mapbox.mapboxgl.geometry.LatLng;
import com.mapbox.mapboxgl.views.R;
@@ -145,13 +146,32 @@ public class Marker extends Annotation {
return;
}
+ getInfoWindow().open(this, getPosition(), (int) anchorU, (int) anchorV);
+ getInfoWindow().setBoundMarker(this);
+ infoWindowShown = true;
+ }
+
+ /**
+ * Use to set a custom OnTouchListener for the InfoWindow.
+ * By default the InfoWindow will close on touch.
+ * @param listener Custom OnTouchListener
+ */
+ public void setInfoWindowOnTouchListener(View.OnTouchListener listener) {
+ if (listener == null) {
+ return;
+ }
+ getInfoWindow().setOnTouchListener(listener);
+ }
+
+ /**
+ * Common internal InfoWindow initialization method
+ * @return InfoWindow for Marker
+ */
+ private InfoWindow getInfoWindow() {
if (infoWindow == null) {
infoWindow = new InfoWindow(R.layout.infowindow, mapView);
}
-
- infoWindow.open(this, getPosition(), (int)anchorU, (int)anchorV);
- infoWindow.setBoundMarker(this);
- infoWindowShown = true;
+ return infoWindow;
}
@Override
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java
index aa2fed1e9c..e96cf3ed0b 100644
--- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java
+++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxgl/views/MapView.java
@@ -8,10 +8,7 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Matrix;
-import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.RectF;
import android.graphics.SurfaceTexture;
@@ -30,7 +27,6 @@ import android.support.v4.content.ContextCompat;
import android.support.v4.view.GestureDetectorCompat;
import android.support.v4.view.ScaleGestureDetectorCompat;
import android.text.TextUtils;
-import android.util.Log;
import android.view.GestureDetector;
import android.view.Gravity;
import android.view.ScaleGestureDetector;
@@ -484,6 +480,9 @@ public class MapView extends FrameLayout implements LocationListener {
private void removeAnnotationsWithId(long annotationId){
for (Iterator<Annotation> iterator = mAnnotations.iterator(); iterator.hasNext();) {
Annotation annotation = iterator.next();
+ if (annotation instanceof Marker) {
+ ((Marker)annotation).hideInfoWindow();
+ }
if (annotation.getId() == annotationId) {
iterator.remove();
}
@@ -491,6 +490,9 @@ public class MapView extends FrameLayout implements LocationListener {
}
public void removeAnnotation(Annotation annotation) {
+ if (annotation instanceof Marker) {
+ ((Marker)annotation).hideInfoWindow();
+ }
long id = annotation.getId();
mNativeMapView.removeAnnotation(id);
mAnnotations.remove(annotation);
@@ -504,8 +506,12 @@ public class MapView extends FrameLayout implements LocationListener {
public void removeAnnotations() {
long[] ids = new long[mAnnotations.size()];
for(int i = 0; i < mAnnotations.size(); i++) {
- long id = mAnnotations.get(i).getId();
+ Annotation annotation = mAnnotations.get(i);
+ long id = annotation.getId();
ids[i] = id;
+ if (annotation instanceof Marker) {
+ ((Marker)annotation).hideInfoWindow();
+ }
}
mNativeMapView.removeAnnotations(ids);
mAnnotations.clear();
diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxgl/testapp/MainActivity.java b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxgl/testapp/MainActivity.java
index ba521fc316..ed9b7ef066 100644
--- a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxgl/testapp/MainActivity.java
+++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxgl/testapp/MainActivity.java
@@ -22,7 +22,9 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
+import android.widget.Toast;
import com.crashlytics.android.Crashlytics;
+import com.mapbox.mapboxgl.annotations.Marker;
import com.mapbox.mapboxgl.annotations.MarkerOptions;
import com.mapbox.mapboxgl.annotations.PolygonOptions;
import com.mapbox.mapboxgl.annotations.PolylineOptions;
@@ -395,10 +397,18 @@ public class MainActivity extends AppCompatActivity {
private void addMarkers() {
LatLng backLot = new LatLng(38.649441, -121.369064);
- mMapView.addMarker(new MarkerOptions()
+ final Marker marker = mMapView.addMarker(new MarkerOptions()
.position(backLot)
.title("Back Lot")
.snippet("The back lot behind my house"));
+ marker.setInfoWindowOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View view, MotionEvent motionEvent) {
+ Toast.makeText(getApplicationContext(), "Custom Info Touch Listener!!", Toast.LENGTH_SHORT).show();
+ marker.hideInfoWindow();
+ return true;
+ }
+ });
LatLng cheeseRoom = new LatLng(38.531577,-122.010646);
mMapView.addMarker(new MarkerOptions()