diff options
author | Tobrun <tobrun.vannuland@icapps.com> | 2015-09-29 15:54:48 +0200 |
---|---|---|
committer | Tobrun <tobrun.vannuland@icapps.com> | 2015-10-02 15:09:23 +0200 |
commit | 02bc2bd7bef98f330356c30562038813b22a0fdc (patch) | |
tree | 27c8e81aac2f57f3c8d0d0ba249922a11ae8582d /android | |
parent | 3d834b5c40f28cd8fd19fb285435c5cfafd32af4 (diff) | |
download | qtlocation-mapboxgl-02bc2bd7bef98f330356c30562038813b22a0fdc.tar.gz |
Add InfoWindowAdapter, had to move some parts in InfoWindow + Marker
InfoWindowAdapter example in sample app
Diffstat (limited to 'android')
4 files changed, 95 insertions, 9 deletions
diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java index 59d3bc90ca..57789f102d 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/Marker.java @@ -157,11 +157,24 @@ public class Marker extends Annotation { return; } + getInfoWindow().adaptDefaultMarker(this); getInfoWindow().open(this, getPosition(), (int) anchorU, (int) anchorV); getInfoWindow().setBoundMarker(this); infoWindowShown = true; } + public void showInfoWindow(View view){ + + if (!isVisible() || mapView == null) { + return; + } + + infoWindow = new InfoWindow(view, mapView); + infoWindow.open(this, getPosition(), (int) anchorU, (int) anchorV); + infoWindow.setBoundMarker(this); + infoWindowShown = true; + } + /** * Use to set a custom OnTouchListener for the InfoWindow. * By default the InfoWindow will close on touch. diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/InfoWindow.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/InfoWindow.java index 385e372440..e97878748f 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/InfoWindow.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/InfoWindow.java @@ -81,7 +81,6 @@ public final class InfoWindow { * @return this infowindow */ public InfoWindow open(Marker object, LatLng position, int offsetX, int offsetY) { - onOpen(object); MapView.LayoutParams lp = new MapView.LayoutParams(MapView.LayoutParams.WRAP_CONTENT, MapView.LayoutParams.WRAP_CONTENT); mView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); @@ -141,7 +140,7 @@ public final class InfoWindow { * * @param overlayItem the tapped overlay item */ - public void onOpen(Marker overlayItem) { + public void adaptDefaultMarker(Marker overlayItem) { String title = overlayItem.getTitle(); ((TextView) mView.findViewById(mTitleId /*R.id.title*/)).setText(title); String snippet = overlayItem.getSnippet(); diff --git a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java index a324920437..1de14a9055 100644 --- a/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java +++ b/android/java/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/views/MapView.java @@ -192,6 +192,7 @@ public final class MapView extends FrameLayout implements LocationListener, Comp private List<Annotation> mAnnotations = new ArrayList<>(); private List<Annotation> mAnnotationsNearLastTap = new ArrayList<>(); private Annotation mSelectedAnnotation = null; + private InfoWindowAdapter mInfoWindowAdapter; // Used for the Mapbox Logo private ImageView mLogoView; @@ -395,6 +396,19 @@ public final class MapView extends FrameLayout implements LocationListener, Comp void onMapChanged(MapChange change); } + /** + * Interface definition for a callback to be invoked when an {@link InfoWindow} will be shown. + */ + public interface InfoWindowAdapter { + /** + * Called when the user clicks on a marker. + * + * @param marker The marker the user clicked on. + * @return View to be shown as a {@link InfoWindow} + */ + View getInfoWindow(Marker marker); + } + // // Constructors // @@ -1503,12 +1517,20 @@ public final class MapView extends FrameLayout implements LocationListener, Comp deselectAnnotation(); Marker marker = (Marker) annotation; - boolean handledClick = false; + boolean handledDefaultClick = false; if (onMarkerClickListener != null) { - handledClick = onMarkerClickListener.onMarkerClick(marker); + // end developer has provided a custom click listener + handledDefaultClick = onMarkerClickListener.onMarkerClick(marker); } - if (!handledClick) { + if(mInfoWindowAdapter!=null){ + // end developer is using a custom InfoWindowAdapter + View content = mInfoWindowAdapter.getInfoWindow(marker); + if(content != null){ + marker.showInfoWindow(content); + } + }else if (!handledDefaultClick) { + // default behaviour marker.showInfoWindow(); } @@ -2331,7 +2353,7 @@ public final class MapView extends FrameLayout implements LocationListener, Comp // /** - * Add an OnMapChangedListner + * Add an OnMapChangedListener * * @param listener Listener to add */ @@ -2342,6 +2364,15 @@ public final class MapView extends FrameLayout implements LocationListener, Comp } /** + * Add an InfoWindowAdapter + * + * @param infoWindowAdapter to set + */ + public void setInfoWindowAdapter(@NonNull InfoWindowAdapter infoWindowAdapter){ + mInfoWindowAdapter = infoWindowAdapter; + } + + /** * Remove an OnMapChangedListener * * @param listener Listener to remove @@ -2659,4 +2690,4 @@ public final class MapView extends FrameLayout implements LocationListener, Comp context.startActivity(intent); } } -} +}
\ No newline at end of file diff --git a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SecondMapActivity.java b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SecondMapActivity.java index 9663d2a6cd..173c1f2882 100644 --- a/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SecondMapActivity.java +++ b/android/java/MapboxGLAndroidSDKTestApp/src/main/java/com/mapbox/mapboxsdk/testapp/SecondMapActivity.java @@ -1,11 +1,20 @@ package com.mapbox.mapboxsdk.testapp; +import android.graphics.Color; import android.os.Bundle; +import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.MenuItem; +import android.view.View; +import android.widget.TextView; + +import com.mapbox.mapboxsdk.annotations.Marker; +import com.mapbox.mapboxsdk.annotations.MarkerOptions; +import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.views.MapView; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -24,8 +33,12 @@ public class SecondMapActivity extends AppCompatActivity { Toolbar toolbar = (Toolbar) findViewById(R.id.secondToolBar); setSupportActionBar(toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - getSupportActionBar().setDisplayShowHomeEnabled(true); + + ActionBar actionBar = getSupportActionBar(); + if(actionBar!=null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowHomeEnabled(true); + } mMapView = (MapView) findViewById(R.id.secondMapView); // Load the access token @@ -40,6 +53,36 @@ public class SecondMapActivity extends AppCompatActivity { mMapView.onCreate(savedInstanceState); mMapView.setStyleUrl(MapView.StyleUrls.EMERALD); + + mMapView.setInfoWindowAdapter(new MapView.InfoWindowAdapter() { + + @Override + public View getInfoWindow(Marker marker) { + TextView textView = new TextView(SecondMapActivity.this); + textView.setText(marker.getTitle()); + textView.setBackgroundColor(Color.WHITE); + return textView; + } + }); + + mMapView.addMarker(generateMarker("Andorra", 42.505777, 1.525294)); + mMapView.addMarker(generateMarker("Luxembourg", 49.815273, 6.129583)); + mMapView.addMarker(generateMarker("Monaco", 43.738418, 7.424616)); + mMapView.addMarker(generateMarker("Vatican City", 41.902916, 12.453389)); + mMapView.addMarker(generateMarker("San Marino", 43.942360, 12.457777)); + mMapView.addMarker(generateMarker("Malta", 35.892110, 14.427795)); + mMapView.addMarker(generateMarker("Liechtenstein", 47.166000, 9.555373)); + + mMapView.setCenterCoordinate(new LatLng(47.798202, 3.573781)); + mMapView.setZoomLevel(3); + } + + private MarkerOptions generateMarker(String title, double lat, double lng){ + MarkerOptions marker = new MarkerOptions(); + marker.title(title); + marker.snippet(title); + marker.position(new LatLng(lat, lng)); + return marker; } /** |