Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 06021d6

Browse files
authored
Upgrade mapView to manage multiple OnTouchListener (#511)
1 parent cc1c881 commit 06021d6

File tree

1 file changed

+32
-3
lines changed
  • MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps

1 file changed

+32
-3
lines changed

MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import android.view.MotionEvent;
1111
import android.view.TextureView;
1212
import android.view.View;
13+
import android.view.View.OnTouchListener;
1314
import android.widget.FrameLayout;
1415
import android.widget.ImageView;
1516

@@ -65,6 +66,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback {
6566
private final MapChangeReceiver mapChangeReceiver = new MapChangeReceiver();
6667
private final MapCallback mapCallback = new MapCallback();
6768
private final InitialRenderCallback initialRenderCallback = new InitialRenderCallback();
69+
private final List<OnTouchListener> onTouchListeners = new ArrayList<>();
6870

6971
@Nullable
7072
private NativeMap nativeMapView;
@@ -464,6 +466,8 @@ public void onDestroy() {
464466
if (mapRenderer != null) {
465467
mapRenderer.onDestroy();
466468
}
469+
470+
onTouchListeners.clear();
467471
}
468472

469473
/**
@@ -519,13 +523,38 @@ public View getRenderView() {
519523
return renderView;
520524
}
521525

526+
/**
527+
* Add an OnTouchListener which will be call when an event occurs
528+
*
529+
* @param listener
530+
* @return true if listener has been successfully registered
531+
*/
532+
public boolean addOnTouchListener(OnTouchListener listener) {
533+
return onTouchListeners.add(listener);
534+
}
535+
536+
/**
537+
* Remove an OnTouchListener previously registered
538+
*
539+
* @param listener
540+
* @return true if listener has been successfully unregistered
541+
*/
542+
public boolean removeOnTouchListener(OnTouchListener listener) {
543+
return onTouchListeners.remove(listener);
544+
}
545+
522546
@Override
523547
public boolean onTouchEvent(MotionEvent event) {
524-
if (!isGestureDetectorInitialized()) {
525-
return super.onTouchEvent(event);
548+
if (isGestureDetectorInitialized() && mapGestureDetector.onTouchEvent(event) || super.onTouchEvent(event)) {
549+
return true;
526550
}
527551

528-
return mapGestureDetector.onTouchEvent(event) || super.onTouchEvent(event);
552+
for (OnTouchListener listener : onTouchListeners) {
553+
if (listener.onTouch(this, event) {
554+
return true;
555+
}
556+
}
557+
return false;
529558
}
530559

531560
@Override

0 commit comments

Comments
 (0)