summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2017-02-14 10:22:14 +0100
committerTobrun <tobrun.van.nuland@gmail.com>2017-02-14 11:43:45 +0100
commit37a26408cdf1ac195def529a114601d22cd1266a (patch)
treedfefaed8185494a6c3d2cf62b69f619c83865a96
parent46ae49ee49333c0493061308638da81ee8f720a7 (diff)
downloadqtlocation-mapboxgl-37a26408cdf1ac195def529a114601d22cd1266a.tar.gz
brb
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java1
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapboxMap.java16
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java238
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java2
4 files changed, 104 insertions, 153 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 0cf8124c4b..930fcae072 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
@@ -14,6 +14,7 @@ import android.net.NetworkInfo;
import android.net.Uri;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
+import android.os.Looper;
import android.support.annotation.CallSuper;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
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 2ea9f422b9..c1046e868a 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
@@ -631,10 +631,7 @@ public final class MapboxMap {
*/
@UiThread
public final void moveCamera(final CameraUpdate update, final MapboxMap.CancelableCallback callback) {
- transform.moveCamera(MapboxMap.this, update, callback);
- // MapChange.REGION_DID_CHANGE_ANIMATED is not called for `jumpTo`
- // invalidate camera position to provide OnCameraChange event.
- invalidateCameraPosition();
+ transform.animateCamera(MapboxMap.this, update, 0, callback);
}
/**
@@ -732,7 +729,7 @@ public final class MapboxMap {
@UiThread
public final void easeCamera(final CameraUpdate update, final int durationMs, final boolean easingInterpolator,
final MapboxMap.CancelableCallback callback) {
- transform.easeCamera(MapboxMap.this, update, durationMs, easingInterpolator, callback);
+ transform.animateCamera(MapboxMap.this, update, durationMs, callback);
}
/**
@@ -817,16 +814,9 @@ public final class MapboxMap {
}
//
- // Reset North
+ // Size
//
- /**
- * Resets the map view to face north.
- */
- public void resetNorth() {
- transform.resetNorth();
- }
-
public float getHeight() {
return projection.getHeight();
}
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 d3bd248c15..11a7e960db 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
@@ -1,7 +1,5 @@
package com.mapbox.mapboxsdk.maps;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.TypeEvaluator;
import android.animation.ValueAnimator;
@@ -10,8 +8,8 @@ import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import android.support.annotation.WorkerThread;
-import android.view.animation.AnticipateOvershootInterpolator;
-import android.view.animation.BounceInterpolator;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import com.mapbox.mapboxsdk.annotations.MarkerViewManager;
@@ -22,8 +20,6 @@ import com.mapbox.mapboxsdk.constants.MapboxConstants;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.widgets.MyLocationView;
-import java.util.concurrent.TimeUnit;
-
import timber.log.Timber;
/**
@@ -40,6 +36,7 @@ final class Transform extends MapThreadExecutor implements State {
private final TrackingSettings trackingSettings;
private final MyLocationView myLocationView;
+ private ValueAnimator stateAnimator;
private MapboxMap.CancelableCallback cameraCancelableCallback;
private MapboxMap.OnCameraChangeListener onCameraChangeListener;
@@ -58,7 +55,7 @@ final class Transform extends MapThreadExecutor implements State {
void initialise(@NonNull MapboxMap mapboxMap, @NonNull MapboxMapOptions options) {
CameraPosition position = options.getCamera();
if (position != null && !position.equals(CameraPosition.DEFAULT)) {
- moveCamera(mapboxMap, CameraUpdateFactory.newCameraPosition(position), null);
+ animateCamera(mapboxMap, CameraUpdateFactory.newCameraPosition(position), 0, null);
}
}
@@ -116,87 +113,36 @@ final class Transform extends MapThreadExecutor implements State {
}
@UiThread
- final void moveCamera(final MapboxMap mapboxMap, final CameraUpdate update,
- final MapboxMap.CancelableCallback callback) {
- queueRenderEvent(new MapRunnable() {
- @Override
- public void execute(@NonNull NativeMapView nativeMapView) {
- CameraPosition cameraPosition = update.getCameraPosition(mapboxMap);
- setCameraPosition(cameraPosition);
- cancelTransitions(nativeMapView);
- nativeMapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
- trackingSettings.resetTrackingModesIfRequired(cameraPosition);
- if (callback != null) {
- callback.onFinish();
- }
- }
- });
-
- }
-
- @UiThread
- final void easeCamera(final MapboxMap mapboxMap, final CameraUpdate update, final int durationMs,
- final boolean easingInterpolator, final MapboxMap.CancelableCallback callback) {
- queueRenderEvent(new MapRunnable() {
- @Override
- public void execute(@NonNull NativeMapView nativeMapView) {
- CameraPosition position = update.getCameraPosition(mapboxMap);
- trackingSettings.resetTrackingModesIfRequired(position);
-
- cancelTransitions(nativeMapView);
- if (callback != null) {
- cameraCancelableCallback = callback;
- // nativeMapView.addOnMapChangedListener(Transform.this);
- }
-
- nativeMapView.easeTo(position.bearing, position.target, getDurationNano(durationMs), position.tilt,
- position.zoom, easingInterpolator);
- }
- });
- }
-
- @UiThread
final void animateCamera(final MapboxMap mapboxMap, final CameraUpdate update, final int durationMs,
final MapboxMap.CancelableCallback callback) {
queueRenderEvent(new MapRunnable() {
@Override
public void execute(@NonNull NativeMapView nativeMapView) {
- CameraPosition position = update.getCameraPosition(mapboxMap);
+ final CameraPosition position = update.getCameraPosition(mapboxMap);
trackingSettings.resetTrackingModesIfRequired(position);
-
cancelTransitions(nativeMapView);
if (callback != null) {
cameraCancelableCallback = callback;
// nativeMapView.addOnMapChangedListener(Transform.this);
}
- nativeMapView.flyTo(position.bearing, position.target, getDurationNano(durationMs), position.tilt,
- position.zoom);
+ queueUiEvent(new Runnable() {
+ @Override
+ public void run() {
+ animate(
+ position.target,
+ position.zoom,
+ position.tilt,
+ position.bearing,
+ durationMs,
+ new LinearInterpolator());
+ }
+ });
}
});
}
@UiThread
- void invalidateCameraPosition() {
-// queueRenderEvent(new MapRunnable() {
-// @Override
-// public void execute(@NonNull NativeMapView nativeMapView) {
-// final CameraPosition cameraPosition = new CameraPosition.Builder(nativeMapView.getCameraValues()).build();
-// queueUiEvent(new Runnable() {
-// @Override
-// public void run() {
-// updateCameraPosition(cameraPosition);
-// if (onCameraChangeListener != null) {
-// // post camera change event on ui Thread
-// onCameraChangeListener.onCameraChange(cameraPosition);
-// }
-// }
-// });
-// }
-// });
- }
-
- @UiThread
void cancelTransitions() {
queueRenderEvent(new MapRunnable() {
@Override
@@ -208,37 +154,41 @@ final class Transform extends MapThreadExecutor implements State {
@WorkerThread
void cancelTransitions(NativeMapView nativeMapView) {
- if (cameraCancelableCallback != null) {
- queueUiEvent(new Runnable() {
- @Override
- public void run() {
- cameraCancelableCallback.onCancel();
- cameraCancelableCallback = null;
- }
- });
- }
- nativeMapView.cancelTransitions();
- }
-
- @UiThread
- void resetNorth() {
- queueRenderEvent(new MapRunnable() {
+ queueUiEvent(new Runnable() {
@Override
- public void execute(@NonNull NativeMapView nativeMapView) {
- cancelTransitions(nativeMapView);
- nativeMapView.resetNorth();
+ public void run() {
+ if (stateAnimator != null) {
+ stateAnimator.cancel();
+ }
+ // todo migrate this to onAnimationCancel
+ if (cameraCancelableCallback != null) {
+ queueUiEvent(new Runnable() {
+ @Override
+ public void run() {
+ cameraCancelableCallback.onCancel();
+ cameraCancelableCallback = null;
+ }
+ });
+ }
}
});
+
+ // do we still needs this? :thinking_face:
+ nativeMapView.cancelTransitions();
}
+ //
+ // CameraChangeListener
+ //
+
@UiThread
void setOnCameraChangeListener(@Nullable MapboxMap.OnCameraChangeListener listener) {
this.onCameraChangeListener = listener;
}
- private long getDurationNano(long durationMs) {
- return durationMs > 0 ? TimeUnit.NANOSECONDS.convert(durationMs, TimeUnit.MILLISECONDS) : 0;
- }
+ //
+ // Zoom
+ //
@UiThread
double getZoom() {
@@ -251,28 +201,6 @@ final class Transform extends MapThreadExecutor implements State {
zoom(zoomIn, -1.0f, -1.0f);
}
- @WorkerThread
- private synchronized void updateTransformationState(NativeMapView nativeMapView, TransformState transformState) {
- currentTransformState.latLng = transformState.latLng;
- currentTransformState.zoom = transformState.zoom;
- currentTransformState.bearing = transformState.bearing;
- currentTransformState.tilt = transformState.tilt;
-
- nativeMapView.setLatLng(currentTransformState.latLng);
- nativeMapView.setZoom(currentTransformState.zoom);
- nativeMapView.setPitch(currentTransformState.tilt);
- nativeMapView.setBearing(currentTransformState.bearing);
-
-// nativeMapView.easeTo(currentTransformState.bearing,
-// currentTransformState.latLng,
-// 0,
-// currentTransformState.tilt,
-// currentTransformState.zoom,
-// true);
-
- Timber.e("STATE ANIMATING: %s", currentTransformState);
- }
-
@UiThread
void zoom(final boolean zoomIn, final float x, final float y) {
queueRenderEvent(new MapRunnable() {
@@ -290,10 +218,10 @@ final class Transform extends MapThreadExecutor implements State {
Timber.e("STATE: Now %s", currentTransformState);
Timber.e("STATE: Future %s", futureTransformState);
- final ValueAnimator stateAnimator = ObjectAnimator.ofObject(this, "currentTransformState",
+ stateAnimator = ObjectAnimator.ofObject(this, "currentTransformState",
new TransformStateEvaluator(), new TransformState(currentTransformState), futureTransformState);
stateAnimator.setDuration(MapboxConstants.ANIMATION_DURATION);
- stateAnimator.setInterpolator(new AnticipateOvershootInterpolator());
+ stateAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
stateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
@@ -307,24 +235,9 @@ final class Transform extends MapThreadExecutor implements State {
});
}
});
- stateAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- super.onAnimationEnd(animation);
- Timber.d("OnAnimationEnd");
- queueRenderEvent(new MapRunnable() {
- @Override
- public void execute(@NonNull NativeMapView nativeMapView) {
- nativeMapView.setGestureInProgress(false);
- }
- });
- }
- });
stateAnimator.start();
}
});
-
- nativeMapView.setGestureInProgress(true);
}
});
}
@@ -339,6 +252,10 @@ final class Transform extends MapThreadExecutor implements State {
});
}
+ //
+ // Bearing
+ //
+
@UiThread
double getBearing() {
return currentTransformState.getBearing();
@@ -377,7 +294,7 @@ final class Transform extends MapThreadExecutor implements State {
@UiThread
double getTilt() {
- return currentTransformState.getBearing();
+ return currentTransformState.getTilt();
}
@UiThread
@@ -390,7 +307,7 @@ final class Transform extends MapThreadExecutor implements State {
queueRenderEvent(new MapRunnable() {
@Override
public void execute(@NonNull NativeMapView nativeMapView) {
- nativeMapView.setPitch(pitch, 0);
+ nativeMapView.setPitch(pitch);
}
});
}
@@ -406,9 +323,6 @@ final class Transform extends MapThreadExecutor implements State {
nativeMapView.setGestureInProgress(gestureInProgress);
}
});
- if (!gestureInProgress) {
- invalidateCameraPosition();
- }
}
void zoomBy(final double pow, final float x, final float y) {
@@ -473,6 +387,53 @@ final class Transform extends MapThreadExecutor implements State {
return maxZoom;
}
+ //
+ // TransformState
+ //
+
+ @UiThread
+ private void animate(LatLng latLng, double zoom, double tilt, double bearing, long duration,
+ Interpolator interpolator) {
+ futureTransformState.setLatLng(latLng);
+ futureTransformState.setZoom(zoom);
+ futureTransformState.setTilt(tilt);
+ futureTransformState.setBearing(bearing);
+
+ stateAnimator = ObjectAnimator.ofObject(this, "currentTransformState",
+ new TransformStateEvaluator(), new TransformState(currentTransformState), new TransformState(futureTransformState));
+ stateAnimator.setDuration(duration);
+ stateAnimator.setInterpolator(interpolator);
+ stateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+
+ @Override
+ public synchronized void onAnimationUpdate(ValueAnimator valueAnimator) {
+ final TransformState transformState = (TransformState) valueAnimator.getAnimatedValue();
+ Timber.e("A: OnAnimationUpdated called on UIThread with transformState: %s", transformState);
+ queueRenderEvent(new MapRunnable() {
+ @Override
+ public void execute(@NonNull NativeMapView nativeMapView) {
+ updateTransformationState(nativeMapView, transformState);
+ }
+ });
+ }
+ });
+ stateAnimator.start();
+ }
+
+ @WorkerThread
+ private synchronized void updateTransformationState(NativeMapView nativeMapView, TransformState transformState) {
+ Timber.e("B: setCameraPosition called on WorkerThread with transformState: %s", transformState);
+ currentTransformState.latLng = transformState.latLng;
+ currentTransformState.zoom = transformState.zoom;
+ currentTransformState.bearing = transformState.bearing;
+ currentTransformState.tilt = transformState.tilt;
+ nativeMapView.setCameraPosition(
+ transformState.bearing,
+ transformState.latLng,
+ transformState.tilt,
+ transformState.zoom
+ );
+ }
private class TransformState {
@@ -533,7 +494,6 @@ final class Transform extends MapThreadExecutor implements State {
public String toString() {
return "Target: " + latLng + ", Zoom:" + zoom + ", Bearing:" + bearing + ", Tilt:" + tilt;
}
-
}
private class TransformStateEvaluator implements TypeEvaluator<TransformState> {
@@ -547,9 +507,9 @@ final class Transform extends MapThreadExecutor implements State {
transformState.latLng.setLongitude(startValue.latLng.getLongitude()
+ (endValue.latLng.getLongitude() - startValue.latLng.getLongitude()) * fraction);
transformState.zoom = startValue.zoom + (endValue.zoom - startValue.zoom) * fraction;
+ transformState.tilt = startValue.tilt + (endValue.tilt - endValue.tilt) * fraction;
+ transformState.bearing = startValue.bearing + (endValue.bearing - endValue.bearing) * fraction;
return transformState;
}
}
-
-
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java
index b3a7fd787f..3d07aa62e0 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/widgets/CompassView.java
@@ -179,7 +179,7 @@ public final class CompassView extends AppCompatImageView implements Runnable, F
//mapboxMap.setFocalBearing(0, mapboxMap.getWidth() / 2, mapboxMap.getHeight() / 2, TIME_MAP_NORTH_ANIMATION);
//}
// FIXME: 10/02/2017 with animation and focal point
- mapboxMap.resetNorth();
+ // mapboxMap.resetNorth();
compassView.postDelayed(compassView, TIME_WAIT_IDLE + TIME_MAP_NORTH_ANIMATION);
}
}