diff options
author | Łukasz Paczos <lukasz.paczos@mapbox.com> | 2019-09-06 17:31:21 +0200 |
---|---|---|
committer | Łukasz Paczos <lukasz.paczos@mapbox.com> | 2019-09-06 17:31:21 +0200 |
commit | badde7868e0ad87496037a9175be62701aac9edc (patch) | |
tree | 1a071265fcdc59562b123c1ea1f3c376f602205b | |
parent | 6574aad91d17514477b646ef226ed9c6136ee617 (diff) | |
download | qtlocation-mapboxgl-badde7868e0ad87496037a9175be62701aac9edc.tar.gz |
[android][wip] additional camera callbacks
2 files changed, 35 insertions, 11 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraTransition.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraTransition.java index a4c068e70c..5d1c20dd61 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraTransition.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraTransition.java @@ -27,6 +27,7 @@ public abstract class CameraTransition<T> { private final int reason; private T startValue; + private T currentValue; private final T endValue; private double startTimeMillis; @@ -93,6 +94,10 @@ public abstract class CameraTransition<T> { return startValue; } + public T getCurrentValue() { + return currentValue; + } + public T getEndValue() { return endValue; } @@ -148,7 +153,7 @@ public abstract class CameraTransition<T> { T onFrame(double currentTimeNanos) { double animationPosition = (currentTimeNanos - startTimeNanos) / durationNanos; double fraction = interpolator.getInterpolation((float) animationPosition); - return getAnimatedValue(fraction); + return currentValue = getAnimatedValue(fraction); } boolean isFinishing() { @@ -159,16 +164,16 @@ public abstract class CameraTransition<T> { isFinishing = true; } - public void onProgress() { + void onProgress() { for (Listener listener : listeners) { - listener.onProgress(); + listener.onProgress(this); } } void onCancel() { this.isCanceled = true; for (Listener listener : listeners) { - listener.onCancel(); + listener.onCancel(this); } onFinish(); } @@ -182,7 +187,7 @@ public abstract class CameraTransition<T> { this.isStarted = false; this.isFinished = true; for (Listener listener : listeners) { - listener.onFinish(); + listener.onFinish(this); } } @@ -193,10 +198,10 @@ public abstract class CameraTransition<T> { public interface Listener { - void onProgress(); + void onProgress(CameraTransition transition); - void onCancel(); + void onCancel(CameraTransition transition); - void onFinish(); + void onFinish(CameraTransition transition); } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapCameraController.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapCameraController.java index 34bcd134db..33860f3735 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapCameraController.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapCameraController.java @@ -11,10 +11,14 @@ import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; public class MapCameraController { @NonNull + private final List<OnCameraChangedListener> cameraChangedListeners = new CopyOnWriteArrayList<>(); + + @NonNull private final HashMap<Integer, LinkedList<CameraTransition>> queuedTransitions = new HashMap<>(5); @NonNull @@ -57,11 +61,11 @@ public class MapCameraController { checkNextTransition(transition.getCameraProperty()); } - boolean shouldRun = false; + boolean hasUpdates = false; CameraPosition.Builder builder = new CameraPosition.Builder(); for (final CameraTransition transition : runningTransitions.values()) { if (transition.getStartTimeNanos() <= frameTimeNanos) { - shouldRun = true; + hasUpdates = true; if (frameTimeNanos >= transition.getEndTimeNanos()) { transition.setFinishing(); } @@ -71,8 +75,11 @@ public class MapCameraController { } } - if (shouldRun) { + if (hasUpdates) { transform.moveCamera(builder.build()); + for (OnCameraChangedListener listener : cameraChangedListeners) { + listener.onCameraChanged(); + } } List<CameraTransition> finished = new ArrayList<>(); @@ -164,6 +171,14 @@ public class MapCameraController { cancelRunningTransitions(); } + public void addOnCameraChangedListener(OnCameraChangedListener listener) { + cameraChangedListeners.add(listener); + } + + public void removeOnCameraChangedListener(OnCameraChangedListener listener) { + cameraChangedListeners.remove(listener); + } + @NonNull public HashMap<Integer, LinkedList<CameraTransition>> getQueuedTransitions() { return new HashMap<>(queuedTransitions); @@ -267,6 +282,10 @@ public class MapCameraController { CameraTransition resolve(CameraTransition currentTransition, CameraTransition interruptingTransition); } + public interface OnCameraChangedListener { + void onCameraChanged(); + } + public static class DefaultCameraBehavior implements CameraBehavior { @Override |