|
10 | 10 | import android.view.MotionEvent; |
11 | 11 | import android.view.TextureView; |
12 | 12 | import android.view.View; |
| 13 | +import android.view.View.OnTouchListener; |
13 | 14 | import android.widget.FrameLayout; |
14 | 15 | import android.widget.ImageView; |
15 | 16 |
|
@@ -65,6 +66,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback { |
65 | 66 | private final MapChangeReceiver mapChangeReceiver = new MapChangeReceiver(); |
66 | 67 | private final MapCallback mapCallback = new MapCallback(); |
67 | 68 | private final InitialRenderCallback initialRenderCallback = new InitialRenderCallback(); |
| 69 | + private final List<OnTouchListener> onTouchListeners = new ArrayList<>(); |
68 | 70 |
|
69 | 71 | @Nullable |
70 | 72 | private NativeMap nativeMapView; |
@@ -464,6 +466,8 @@ public void onDestroy() { |
464 | 466 | if (mapRenderer != null) { |
465 | 467 | mapRenderer.onDestroy(); |
466 | 468 | } |
| 469 | + |
| 470 | + onTouchListeners.clear(); |
467 | 471 | } |
468 | 472 |
|
469 | 473 | /** |
@@ -519,13 +523,38 @@ public View getRenderView() { |
519 | 523 | return renderView; |
520 | 524 | } |
521 | 525 |
|
| 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 | + |
522 | 546 | @Override |
523 | 547 | 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; |
526 | 550 | } |
527 | 551 |
|
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; |
529 | 558 | } |
530 | 559 |
|
531 | 560 | @Override |
|
0 commit comments