[android] #3747 - InfoWindowLongClickListener

This commit is contained in:
Tobrun
2016-02-09 09:35:38 +01:00
parent 29d61c0fe7
commit 2c6615df55
3 changed files with 74 additions and 10 deletions

View File

@@ -53,22 +53,35 @@ public class InfoWindow {
mIsVisible = false;
mView = new WeakReference<>(view);
// default behavior: close it when clicking on the tooltip:
view.setOnTouchListener(new View.OnTouchListener() {
view.setOnClickListener(new View.OnClickListener() {
@Override
public boolean onTouch(View v, MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_UP) {
public void onClick(View v) {
MapboxMap mapboxMap = mMapboxMap.get();
if (mapboxMap != null) {
MapboxMap.OnInfoWindowClickListener onInfoWindowClickListener = mapboxMap.getOnInfoWindowClickListener();
boolean handledDefaultClick = false;
MapboxMap.OnInfoWindowClickListener onInfoWindowClickListener =
mMapboxMap.get().getOnInfoWindowClickListener();
if (onInfoWindowClickListener != null) {
handledDefaultClick = onInfoWindowClickListener.onMarkerClick(getBoundMarker());
}
if (!handledDefaultClick) {
// default behavior: close it when clicking on the tooltip:
close();
}
}
}
});
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
MapboxMap mapboxMap = mMapboxMap.get();
if (mapboxMap != null) {
MapboxMap.OnInfoWindowLongClickListener listener = mapboxMap.getOnInfoWindowLongClickListener();
if (listener != null) {
listener.onInfoWindowLongClick(getBoundMarker());
}
}
return true;
}
});

View File

@@ -54,6 +54,7 @@ public class MapboxMap {
private MapboxMap.OnMapLongClickListener mOnMapLongClickListener;
private MapboxMap.OnMarkerClickListener mOnMarkerClickListener;
private MapboxMap.OnInfoWindowClickListener mOnInfoWindowClickListener;
private MapboxMap.OnInfoWindowLongClickListener mOnInfoWindowLongClickListener;
private MapboxMap.OnFlingListener mOnFlingListener;
private MapboxMap.OnScrollListener mOnScrollListener;
private MapboxMap.OnMyLocationTrackingModeChangeListener mOnMyLocationTrackingModeChangeListener;
@@ -849,6 +850,25 @@ public class MapboxMap {
return mOnInfoWindowClickListener;
}
/**
* Sets a callback that's invoked when a marker's info window is long pressed.
*
* @param listener The callback that's invoked when a marker's info window is long pressed. To unset the callback, use null.
*/
@UiThread
public void setOnInfoWindowLongClickListener(@Nullable OnInfoWindowLongClickListener listener) {
mOnInfoWindowLongClickListener = listener;
}
/**
* Return the InfoWindow long click listener
*
* @return Current active InfoWindow long Click Listener
*/
public OnInfoWindowLongClickListener getOnInfoWindowLongClickListener() {
return mOnInfoWindowLongClickListener;
}
//
// User location
//
@@ -1133,6 +1153,21 @@ public class MapboxMap {
boolean onMarkerClick(@NonNull Marker marker);
}
/**
* Callback interface for when the user long presses on a marker's info window.
*
* @see MapboxMap#setOnInfoWindowClickListener(OnInfoWindowClickListener)
*/
public interface OnInfoWindowLongClickListener {
/**
* Called when the user makes a long-press gesture on the marker's info window.
*
* @param marker The marker were the info window is attached to
*/
void onInfoWindowLongClick(Marker marker);
}
/**
* Interface definition for a callback to be invoked when an info window will be shown.
*