diff options
author | Tobrun <tobrun@mapbox.com> | 2017-03-17 15:23:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-17 15:23:28 +0100 |
commit | 09d76854ab15b2a6f473c270da9d46e903e426da (patch) | |
tree | 9128297edb9506e87cdad61612c8c377edd3655d /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk | |
parent | 2e6c0263d8455f08ab8c421597190a972dad8dae (diff) | |
download | qtlocation-mapboxgl-09d76854ab15b2a6f473c270da9d46e903e426da.tar.gz |
[android] - only dispatch events if not handled by MarkerView (#8447)
use onTouch listener to ignore dispatching action up events to MapView when they are already handled by MarkerView.
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk')
2 files changed, 23 insertions, 13 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java index 1f206b71ca..d590582f09 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewContainer.java @@ -17,14 +17,18 @@ public class MarkerViewContainer extends FrameLayout { public MarkerViewContainer(Context context, AttributeSet attrs) { super(context, attrs); + setTag(false); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { - final boolean childResult = super.dispatchTouchEvent(ev); - if (childResult) { + super.dispatchTouchEvent(ev); + boolean actionUp = (boolean) getTag(); + if (!actionUp) { ((ViewGroup) getParent()).onTouchEvent(ev); + } else { + setTag(false); } - return childResult; + return true; } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java index 9a721151f7..0f1298eeaf 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/annotations/MarkerViewManager.java @@ -8,6 +8,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LongSparseArray; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -503,18 +504,23 @@ public class MarkerViewManager implements MapView.OnMapChangedListener { } } - adaptedView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - boolean clickHandled = false; - if (onMarkerViewClickListener != null) { - clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter); - } + adaptedView.setOnTouchListener(new View.OnTouchListener() { - if (!clickHandled) { - ensureInfoWindowOffset(marker); - select(marker, v, adapter); + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_UP) { + boolean clickHandled = false; + if (onMarkerViewClickListener != null) { + clickHandled = onMarkerViewClickListener.onMarkerClick(marker, v, adapter); + markerViewContainer.setTag(true); + } + + if (!clickHandled) { + ensureInfoWindowOffset(marker); + select(marker, v, adapter); + } } + return true; } }); |