diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps')
3 files changed, 47 insertions, 11 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index cd31e2278f..238c79392b 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -169,7 +169,9 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback { Transform transform = new Transform(this, nativeMapView, cameraDispatcher); // MapboxMap - mapboxMap = new MapboxMap(nativeMapView, transform, uiSettings, proj, registerTouchListener, cameraDispatcher); + List<MapboxMap.OnDeveloperAnimationListener> developerAnimationListeners = new ArrayList<>(); + mapboxMap = new MapboxMap(nativeMapView, transform, uiSettings, proj, registerTouchListener, cameraDispatcher, + developerAnimationListeners); mapboxMap.injectAnnotationManager(annotationManager); // user input @@ -182,7 +184,7 @@ public class MapView extends FrameLayout implements NativeMapView.ViewCallback { compassView.setOnClickListener(createCompassClickListener(cameraDispatcher)); // LocationComponent - mapboxMap.injectLocationComponent(new LocationComponent(mapboxMap)); + mapboxMap.injectLocationComponent(new LocationComponent(mapboxMap, transform, developerAnimationListeners)); // inject widgets with MapboxMap attrView.setOnClickListener(attributionClickListener = new AttributionClickListener(context, mapboxMap)); diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java index e03358158f..fa34e5b1f7 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java @@ -12,6 +12,7 @@ import android.support.annotation.Size; import android.support.annotation.UiThread; import android.text.TextUtils; import android.view.View; + import com.mapbox.android.gestures.AndroidGesturesManager; import com.mapbox.android.gestures.MoveGestureDetector; import com.mapbox.android.gestures.RotateGestureDetector; @@ -63,6 +64,7 @@ public final class MapboxMap { private final CameraChangeDispatcher cameraChangeDispatcher; private final OnGesturesManagerInteractionListener onGesturesManagerInteractionListener; private final List<Style.OnStyleLoaded> awaitingStyleGetters = new ArrayList<>(); + private final List<OnDeveloperAnimationListener> developerAnimationStartedListeners; @Nullable private Style.OnStyleLoaded styleLoadedCallback; @@ -79,13 +81,15 @@ public final class MapboxMap { private boolean debugActive; MapboxMap(NativeMap map, Transform transform, UiSettings ui, Projection projection, - OnGesturesManagerInteractionListener listener, CameraChangeDispatcher cameraChangeDispatcher) { + OnGesturesManagerInteractionListener listener, CameraChangeDispatcher cameraChangeDispatcher, + List<OnDeveloperAnimationListener> developerAnimationStartedListeners) { this.nativeMapView = map; this.uiSettings = ui; this.projection = projection; this.transform = transform; this.onGesturesManagerInteractionListener = listener; this.cameraChangeDispatcher = cameraChangeDispatcher; + this.developerAnimationStartedListeners = developerAnimationStartedListeners; } void initialise(@NonNull Context context, @NonNull MapboxMapOptions options) { @@ -414,6 +418,7 @@ public final class MapboxMap { */ public final void moveCamera(@NonNull final CameraUpdate update, @Nullable final MapboxMap.CancelableCallback callback) { + notifyDeveloperAnimationListeners(); transform.moveCamera(MapboxMap.this, update, callback); } @@ -522,10 +527,10 @@ public final class MapboxMap { final int durationMs, final boolean easingInterpolator, @Nullable final MapboxMap.CancelableCallback callback) { - if (durationMs <= 0) { throw new IllegalArgumentException("Null duration passed into easeCamera"); } + notifyDeveloperAnimationListeners(); transform.easeCamera(MapboxMap.this, update, durationMs, easingInterpolator, callback); } @@ -596,7 +601,7 @@ public final class MapboxMap { if (durationMs <= 0) { throw new IllegalArgumentException("Null duration passed into animateCamera"); } - + notifyDeveloperAnimationListeners(); transform.animateCamera(MapboxMap.this, update, durationMs, callback); } @@ -608,7 +613,7 @@ public final class MapboxMap { * @param y Amount of pixels to scroll to in y direction */ public void scrollBy(float x, float y) { - nativeMapView.moveBy(x, y, 0); + scrollBy(x, y, 0); } /** @@ -620,6 +625,7 @@ public final class MapboxMap { * @param duration Amount of time the scrolling should take */ public void scrollBy(float x, float y, long duration) { + notifyDeveloperAnimationListeners(); nativeMapView.moveBy(x, y, duration); } @@ -631,6 +637,7 @@ public final class MapboxMap { * Resets the map view to face north. */ public void resetNorth() { + notifyDeveloperAnimationListeners(); transform.resetNorth(); } @@ -643,6 +650,7 @@ public final class MapboxMap { * @param duration The duration of the transformation */ public void setFocalBearing(double bearing, float focalX, float focalY, long duration) { + notifyDeveloperAnimationListeners(); transform.setBearing(bearing, focalX, focalY, duration); } @@ -2342,6 +2350,17 @@ public final class MapboxMap { void onSnapshotReady(@NonNull Bitmap snapshot); } + /** + * Internal use. + */ + public interface OnDeveloperAnimationListener { + + /** + * Notifies listener when a developer invoked animation is about to start. + */ + void onDeveloperAnimationStarted(); + } + // // Used for instrumentation testing // @@ -2349,4 +2368,10 @@ public final class MapboxMap { Transform getTransform() { return transform; } + + private void notifyDeveloperAnimationListeners() { + for (OnDeveloperAnimationListener listener : developerAnimationStartedListeners) { + listener.onDeveloperAnimationStarted(); + } + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java index c40994d7ca..1961cf0450 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java @@ -16,12 +16,15 @@ import com.mapbox.mapboxsdk.log.Logger; import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener; /** + * Internal use. + * <p> * Resembles the current Map transformation. + * </p> * <p> * Responsible for synchronising {@link CameraPosition} state and notifying camera change listeners. * </p> */ -final class Transform implements MapView.OnCameraDidChangeListener { +public final class Transform implements MapView.OnCameraDidChangeListener { private static final String TAG = "Mbgl-Transform"; @@ -95,9 +98,12 @@ final class Transform implements MapView.OnCameraDidChangeListener { } } + /** + * Internal use. + */ @UiThread - final void moveCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, - @Nullable final MapboxMap.CancelableCallback callback) { + public final void moveCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, + @Nullable final MapboxMap.CancelableCallback callback) { CameraPosition cameraPosition = update.getCameraPosition(mapboxMap); if (isValidCameraPosition(cameraPosition)) { cancelTransitions(); @@ -133,9 +139,12 @@ final class Transform implements MapView.OnCameraDidChangeListener { } } + /** + * Internal use. + */ @UiThread - final void animateCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, int durationMs, - @Nullable final MapboxMap.CancelableCallback callback) { + public final void animateCamera(@NonNull MapboxMap mapboxMap, CameraUpdate update, int durationMs, + @Nullable final MapboxMap.CancelableCallback callback) { CameraPosition cameraPosition = update.getCameraPosition(mapboxMap); if (isValidCameraPosition(cameraPosition)) { cancelTransitions(); |