diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2017-02-13 11:36:11 +0100 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2017-02-14 11:43:44 +0100 |
commit | 46ae49ee49333c0493061308638da81ee8f720a7 (patch) | |
tree | c82394d0e48ab3b6f44daa4d2dda9d2d75a860f2 | |
parent | fe7f861ac56b641796fdd8876767c19bb48130ed (diff) | |
download | qtlocation-mapboxgl-46ae49ee49333c0493061308638da81ee8f720a7.tar.gz |
working animator
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/Transform.java | 127 |
1 files changed, 80 insertions, 47 deletions
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 052f2772fa..d3bd248c15 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 @@ -10,7 +10,8 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.support.annotation.WorkerThread; -import android.support.v4.view.animation.LinearOutSlowInInterpolator; +import android.view.animation.AnticipateOvershootInterpolator; +import android.view.animation.BounceInterpolator; import android.view.animation.LinearInterpolator; import com.mapbox.mapboxsdk.annotations.MarkerViewManager; @@ -256,10 +257,20 @@ final class Transform extends MapThreadExecutor implements State { currentTransformState.zoom = transformState.zoom; currentTransformState.bearing = transformState.bearing; currentTransformState.tilt = transformState.tilt; + nativeMapView.setLatLng(currentTransformState.latLng); nativeMapView.setZoom(currentTransformState.zoom); - // nativeMapView.setBearing(currentTransformState.bearing); - //nativeMapView.setPitch(currentTransformState.tilt); + 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 @@ -268,52 +279,54 @@ final class Transform extends MapThreadExecutor implements State { @Override public void execute(@NonNull final NativeMapView nativeMapView) { // calculate new state - LatLng latLng = nativeMapView.fromScreenLocation(x, y); - futureTransformState.setLatLng(latLng); - futureTransformState.setZoom(zoomIn ? currentTransformState.zoom + 1 : currentTransformState.zoom - 1); - futureTransformState.setTilt(currentTransformState.tilt); - futureTransformState.setBearing(currentTransformState.bearing); - - final ValueAnimator stateAnimator = ObjectAnimator.ofObject(this, "currentTransformState", - new TransformStateEvaluator(), currentTransformState, futureTransformState); - stateAnimator.setDuration(9000); - stateAnimator.setInterpolator(new LinearInterpolator()); - stateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + final LatLng latLng = nativeMapView.fromScreenLocation(x, y); + queueUiEvent(new Runnable() { @Override - public void onAnimationUpdate(ValueAnimator valueAnimator) { - final TransformState transformState = (TransformState) valueAnimator.getAnimatedValue(); - queueRenderEvent(new MapRunnable() { + public void run() { + futureTransformState.setLatLng(latLng); + futureTransformState.setZoom(zoomIn ? currentTransformState.zoom + 1 : currentTransformState.zoom - 1); + futureTransformState.setTilt(currentTransformState.tilt); + futureTransformState.setBearing(currentTransformState.bearing); + + Timber.e("STATE: Now %s", currentTransformState); + Timber.e("STATE: Future %s", futureTransformState); + final ValueAnimator stateAnimator = ObjectAnimator.ofObject(this, "currentTransformState", + new TransformStateEvaluator(), new TransformState(currentTransformState), futureTransformState); + stateAnimator.setDuration(MapboxConstants.ANIMATION_DURATION); + stateAnimator.setInterpolator(new AnticipateOvershootInterpolator()); + stateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override - public void execute(@NonNull NativeMapView nativeMapView) { - updateTransformationState(nativeMapView, transformState); + public void onAnimationUpdate(ValueAnimator valueAnimator) { + final TransformState transformState = (TransformState) valueAnimator.getAnimatedValue(); + Timber.e(transformState.toString()); + queueRenderEvent(new MapRunnable() { + @Override + public void execute(@NonNull NativeMapView nativeMapView) { + updateTransformationState(nativeMapView, transformState); + } + }); + } + }); + 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); + } + }); } }); - } - }); - queueUiEvent(new Runnable() { - @Override - public void run() { stateAnimator.start(); } }); - } - }); - float zoomFloat = (float) currentTransformState.getZoom(); - ValueAnimator va = ValueAnimator.ofFloat(0.0f, 1.0f); - va.setDuration(MapboxConstants.ANIMATION_DURATION); - va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { - public void onAnimationUpdate(final ValueAnimator animation) { - final double zoom = ((Float) animation.getAnimatedValue()).doubleValue(); - queueRenderEvent(new MapRunnable() { - @Override - public void execute(@NonNull NativeMapView nativeMapView) { - nativeMapView.scaleBy(zoom, x, y); - } - }); + nativeMapView.setGestureInProgress(true); } }); - va.start(); } @UiThread @@ -468,6 +481,17 @@ final class Transform extends MapThreadExecutor implements State { private double tilt; private double bearing; + TransformState() { + latLng = new LatLng(); + } + + TransformState(TransformState transformState) { + latLng = transformState.getLatLng(); + zoom = transformState.getZoom(); + tilt = transformState.getTilt(); + bearing = transformState.getBearing(); + } + public LatLng getLatLng() { return latLng; } @@ -499,24 +523,33 @@ final class Transform extends MapThreadExecutor implements State { public void setBearing(double bearing) { this.bearing = bearing; } + + /** + * Returns a String with the camera target, zoom, bearing and tilt. + * + * @return A String with CameraPosition information. + */ + @Override + public String toString() { + return "Target: " + latLng + ", Zoom:" + zoom + ", Bearing:" + bearing + ", Tilt:" + tilt; + } + } private class TransformStateEvaluator implements TypeEvaluator<TransformState> { private final TransformState transformState = new TransformState(); - private final LatLng latLng = new LatLng(); @Override public TransformState evaluate(float fraction, TransformState startValue, TransformState endValue) { - latLng.setLatitude(startValue.latLng.getLatitude() - + ((endValue.latLng.getLatitude() - startValue.latLng.getLatitude()) * fraction)); - latLng.setLongitude(startValue.latLng.getLongitude() - + ((endValue.latLng.getLongitude() - startValue.latLng.getLongitude()) * fraction)); - transformState.latLng = latLng; - - transformState.zoom = startValue.zoom + ((endValue.zoom - startValue.zoom) * fraction); + transformState.latLng.setLatitude(startValue.latLng.getLatitude() + + (endValue.latLng.getLatitude() - startValue.latLng.getLatitude()) * fraction); + transformState.latLng.setLongitude(startValue.latLng.getLongitude() + + (endValue.latLng.getLongitude() - startValue.latLng.getLongitude()) * fraction); + transformState.zoom = startValue.zoom + (endValue.zoom - startValue.zoom) * fraction; return transformState; } } + } |