summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commitbadde7868e0ad87496037a9175be62701aac9edc (patch)
tree1a071265fcdc59562b123c1ea1f3c376f602205b
parent6574aad91d17514477b646ef226ed9c6136ee617 (diff)
downloadqtlocation-mapboxgl-badde7868e0ad87496037a9175be62701aac9edc.tar.gz
[android][wip] additional camera callbacks
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/CameraTransition.java21
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapCameraController.java25
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