Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] - wraps camera update around a runnable, allowing to call n…
Browse files Browse the repository at this point in the history
…ew camera updates from onFinish callback. (#7000)
  • Loading branch information
tobrun authored Nov 14, 2016
1 parent b341cc0 commit 50748f4
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 391 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ public Projection getProjection() {
* @return The current position of the Camera.
*/
public final CameraPosition getCameraPosition() {
invalidCameraPosition = invalidCameraPosition || cameraPosition == null;
if (invalidCameraPosition) {
invalidateCameraPosition();
}
Expand Down Expand Up @@ -488,17 +489,22 @@ public final void moveCamera(CameraUpdate update) {
* @param callback the callback to be invoked when an animation finishes or is canceled
*/
@UiThread
public final void moveCamera(CameraUpdate update, MapboxMap.CancelableCallback callback) {
cameraPosition = update.getCameraPosition(this);
mapView.resetTrackingModesIfRequired(cameraPosition);
mapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
if (callback != null) {
callback.onFinish();
}
public final void moveCamera(final CameraUpdate update, final MapboxMap.CancelableCallback callback) {
mapView.post(new Runnable() {
@Override
public void run() {
cameraPosition = update.getCameraPosition(MapboxMap.this);
mapView.resetTrackingModesIfRequired(cameraPosition);
mapView.jumpTo(cameraPosition.bearing, cameraPosition.target, cameraPosition.tilt, cameraPosition.zoom);
if (callback != null) {
callback.onFinish();
}

if (onCameraChangeListener != null) {
onCameraChangeListener.onCameraChange(this.cameraPosition);
}
if (onCameraChangeListener != null) {
onCameraChangeListener.onCameraChange(cameraPosition);
}
}
});
}

/**
Expand Down Expand Up @@ -566,32 +572,36 @@ public final void easeCamera(
}

@UiThread
public final void easeCamera(
CameraUpdate update, int durationMs, boolean easingInterpolator, boolean resetTrackingMode, final MapboxMap.CancelableCallback callback) {
// dismiss tracking, moving camera is equal to a gesture
cameraPosition = update.getCameraPosition(this);
if (resetTrackingMode) {
mapView.resetTrackingModesIfRequired(cameraPosition);
}

mapView.easeTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt,
cameraPosition.zoom, easingInterpolator, new CancelableCallback() {
@Override
public void onCancel() {
if (callback != null) {
callback.onCancel();
}
invalidateCameraPosition();
}
public final void easeCamera(final CameraUpdate update, final int durationMs, final boolean easingInterpolator, final boolean resetTrackingMode, final MapboxMap.CancelableCallback callback) {
mapView.post(new Runnable() {
@Override
public void run() {
// dismiss tracking, moving camera is equal to a gesture
cameraPosition = update.getCameraPosition(MapboxMap.this);
if (resetTrackingMode) {
mapView.resetTrackingModesIfRequired(cameraPosition);
}

@Override
public void onFinish() {
if (callback != null) {
callback.onFinish();
}
invalidateCameraPosition();
}
});
mapView.easeTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt,
cameraPosition.zoom, easingInterpolator, new CancelableCallback() {
@Override
public void onCancel() {
if (callback != null) {
callback.onCancel();
}
invalidateCameraPosition();
}

@Override
public void onFinish() {
if (callback != null) {
callback.onFinish();
}
invalidateCameraPosition();
}
});
}
});
}

/**
Expand Down Expand Up @@ -660,31 +670,36 @@ public final void animateCamera(CameraUpdate update, int durationMs) {
* @see com.mapbox.mapboxsdk.camera.CameraUpdateFactory for a set of updates.
*/
@UiThread
public final void animateCamera(CameraUpdate update, int durationMs, final MapboxMap.CancelableCallback callback) {
cameraPosition = update.getCameraPosition(this);
mapView.resetTrackingModesIfRequired(cameraPosition);
mapView.flyTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt,
cameraPosition.zoom, new CancelableCallback() {
@Override
public void onCancel() {
if (callback != null) {
callback.onCancel();
}
invalidateCameraPosition();
}

@Override
public void onFinish() {
if (onCameraChangeListener != null) {
onCameraChangeListener.onCameraChange(cameraPosition);
}

if (callback != null) {
callback.onFinish();
}
invalidateCameraPosition();
}
});
public final void animateCamera(final CameraUpdate update, final int durationMs, final MapboxMap.CancelableCallback callback) {
mapView.post(new Runnable() {
@Override
public void run() {
cameraPosition = update.getCameraPosition(MapboxMap.this);
mapView.resetTrackingModesIfRequired(cameraPosition);
mapView.flyTo(cameraPosition.bearing, cameraPosition.target, getDurationNano(durationMs), cameraPosition.tilt,
cameraPosition.zoom, new CancelableCallback() {
@Override
public void onCancel() {
if (callback != null) {
callback.onCancel();
}
invalidateCameraPosition();
}

@Override
public void onFinish() {
if (onCameraChangeListener != null) {
onCameraChangeListener.onCameraChange(cameraPosition);
}

if (callback != null) {
callback.onFinish();
}
invalidateCameraPosition();
}
});
}
});
}

/**
Expand Down
Loading

0 comments on commit 50748f4

Please sign in to comment.