From 421ad836851f27a796d19ed56990c51b52cd16c2 Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Sun, 19 Apr 2020 16:11:50 +0300 Subject: [PATCH] Implement startDelay + fix image scale transition This commit adds support to the startDelay option in shared element transitions on Android. It also fixes image scale transition which only animated the image's scale type, but not its bounds. --- .../main/java/com/reactnativenavigation/utils/Animator.kt | 1 - .../views/element/animators/BackgroundColorAnimator.kt | 7 ++----- .../views/element/animators/ClipBoundsAnimator.kt | 2 +- .../views/element/animators/MatrixAnimator.kt | 5 +---- .../views/element/animators/ScaleXAnimator.kt | 2 +- .../views/element/animators/ScaleYAnimator.kt | 4 +--- .../views/element/animators/XAnimator.kt | 3 ++- .../views/element/animators/YAnimator.kt | 7 +++---- 8 files changed, 11 insertions(+), 20 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt index e9f32632f9d..d7ea1b03eb1 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.utils import android.animation.Animator import android.animation.TimeInterpolator -import android.view.animation.Interpolator fun Animator.withStartDelay(delay: Long): Animator { startDelay = delay diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt index 9536de6108b..173621dbd44 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt @@ -10,10 +10,7 @@ import androidx.core.animation.doOnStart import com.facebook.react.views.text.ReactTextView import com.facebook.react.views.view.ReactViewBackgroundDrawable import com.reactnativenavigation.parse.SharedElementTransitionOptions -import com.reactnativenavigation.utils.ColorUtils -import com.reactnativenavigation.utils.ViewUtils -import com.reactnativenavigation.utils.withInterpolator -import com.reactnativenavigation.utils.withStartDelay +import com.reactnativenavigation.utils.* class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) { override fun shouldAnimateProperty(fromChild: ViewGroup, toChild: ViewGroup): Boolean { @@ -35,7 +32,7 @@ class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator( to.scaleX = from.width.toFloat() / to.width return ObjectAnimator .ofFloat(to, View.SCALE_X, from.width.toFloat() / to.width, 1f) - .setDuration(options.getDuration()) + .withDuration(options.getDuration()) .withStartDelay(options.getStartDelay()) .withInterpolator(options.interpolation.interpolator) } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt index a9a77b0fa41..cfaa9d90d2c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt @@ -4,8 +4,6 @@ import android.animation.Animator import android.animation.ObjectAnimator import android.view.View import android.view.ViewGroup -import androidx.core.animation.addListener -import androidx.core.animation.doOnStart import com.facebook.react.views.text.ReactTextView import com.reactnativenavigation.parse.SharedElementTransitionOptions import com.reactnativenavigation.utils.withDuration @@ -23,7 +21,7 @@ class ScaleYAnimator(from: View, to: View) : PropertyAnimatorCreator( to.scaleY = from.height.toFloat() / to.height return ObjectAnimator .ofFloat(to, View.SCALE_Y, from.height.toFloat() / to.height, 1f) - .setDuration(options.getDuration()) + .withDuration(options.getDuration()) .withStartDelay(options.getStartDelay()) .withInterpolator(options.interpolation.interpolator) } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt index 7dab6b09617..debf3c051bb 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt @@ -10,6 +10,7 @@ import androidx.core.animation.doOnStart import com.facebook.react.views.text.ReactTextView import com.reactnativenavigation.parse.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils +import com.reactnativenavigation.utils.withDuration import com.reactnativenavigation.utils.withInterpolator import com.reactnativenavigation.utils.withStartDelay @@ -31,7 +32,7 @@ class XAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) to.translationX = dx.toFloat() return ObjectAnimator .ofFloat(to, TRANSLATION_X, dx.toFloat(), 0f) - .setDuration(options.getDuration()) + .withDuration(options.getDuration()) .withStartDelay(options.getStartDelay()) .withInterpolator(options.interpolation.interpolator) } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt index cb93f532c7c..df3c441b922 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt @@ -1,16 +1,15 @@ package com.reactnativenavigation.views.element.animators import android.animation.Animator -import android.animation.AnimatorListenerAdapter import android.animation.ObjectAnimator import android.view.View import android.view.View.TRANSLATION_Y import android.view.ViewGroup -import androidx.core.animation.addListener -import androidx.core.animation.doOnStart import com.facebook.react.views.text.ReactTextView import com.reactnativenavigation.parse.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils +import com.reactnativenavigation.utils.withDuration + import com.reactnativenavigation.utils.withInterpolator import com.reactnativenavigation.utils.withStartDelay @@ -32,7 +31,7 @@ class YAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) to.translationY = dy.toFloat() return ObjectAnimator .ofFloat(to, TRANSLATION_Y, dy.toFloat(), 0f) - .setDuration(options.getDuration()) + .withDuration(options.getDuration()) .withStartDelay(options.getStartDelay()) .withInterpolator(options.interpolation.interpolator) }