Skip to content

Commit 334ab71

Browse files
authored
Implement startDelay + fix image scale transition (#6137)
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.
1 parent e80eb92 commit 334ab71

File tree

8 files changed

+11
-20
lines changed

8 files changed

+11
-20
lines changed

lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt

-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.reactnativenavigation.utils
22

33
import android.animation.Animator
44
import android.animation.TimeInterpolator
5-
import android.view.animation.Interpolator
65

76
fun Animator.withStartDelay(delay: Long): Animator {
87
startDelay = delay

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt

+2-5
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ import androidx.core.animation.doOnStart
1010
import com.facebook.react.views.text.ReactTextView
1111
import com.facebook.react.views.view.ReactViewBackgroundDrawable
1212
import com.reactnativenavigation.parse.SharedElementTransitionOptions
13-
import com.reactnativenavigation.utils.ColorUtils
14-
import com.reactnativenavigation.utils.ViewUtils
15-
import com.reactnativenavigation.utils.withInterpolator
16-
import com.reactnativenavigation.utils.withStartDelay
13+
import com.reactnativenavigation.utils.*
1714

1815
class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator<ViewGroup>(from, to) {
1916
override fun shouldAnimateProperty(fromChild: ViewGroup, toChild: ViewGroup): Boolean {
@@ -35,7 +32,7 @@ class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator<Vi
3532
fromColor,
3633
toColor
3734
)
38-
.setDuration(options.getDuration())
35+
.withDuration(options.getDuration())
3936
.withStartDelay(options.getStartDelay())
4037
.withInterpolator(options.interpolation.interpolator)
4138
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ClipBoundsAnimator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class ClipBoundsAnimator(from: View, to: View) : PropertyAnimatorCreator<ReactIm
2424
startDrawingRect,
2525
endDrawingRect
2626
)
27-
.setDuration(options.getDuration())
27+
.withDuration(options.getDuration())
2828
.withStartDelay(options.getStartDelay())
2929
.withInterpolator(options.interpolation.interpolator)
3030
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/MatrixAnimator.kt

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package com.reactnativenavigation.views.element.animators
22

33
import android.animation.Animator
4-
import android.animation.AnimatorListenerAdapter
54
import android.animation.ObjectAnimator
65
import android.animation.TypeEvaluator
76
import android.graphics.Rect
87
import android.view.View
9-
import androidx.core.animation.addListener
10-
import androidx.core.animation.doOnStart
118
import com.facebook.drawee.drawable.ScalingUtils.InterpolatingScaleType
129
import com.facebook.react.views.image.ReactImageView
1310
import com.reactnativenavigation.parse.SharedElementTransitionOptions
@@ -38,7 +35,7 @@ class MatrixAnimator(from: View, to: View) : PropertyAnimatorCreator<ReactImageV
3835
}
3936
null
4037
}, 0, 1)
41-
.setDuration(options.getDuration())
38+
.withDuration(options.getDuration())
4239
.withStartDelay(options.getStartDelay())
4340
.withInterpolator(options.interpolation.interpolator)
4441
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleXAnimator.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ScaleXAnimator(from: View, to: View) : PropertyAnimatorCreator<ViewGroup>(
2323
to.scaleX = from.width.toFloat() / to.width
2424
return ObjectAnimator
2525
.ofFloat(to, View.SCALE_X, from.width.toFloat() / to.width, 1f)
26-
.setDuration(options.getDuration())
26+
.withDuration(options.getDuration())
2727
.withStartDelay(options.getStartDelay())
2828
.withInterpolator(options.interpolation.interpolator)
2929
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import android.animation.Animator
44
import android.animation.ObjectAnimator
55
import android.view.View
66
import android.view.ViewGroup
7-
import androidx.core.animation.addListener
8-
import androidx.core.animation.doOnStart
97
import com.facebook.react.views.text.ReactTextView
108
import com.reactnativenavigation.parse.SharedElementTransitionOptions
119
import com.reactnativenavigation.utils.withDuration
@@ -23,7 +21,7 @@ class ScaleYAnimator(from: View, to: View) : PropertyAnimatorCreator<ViewGroup>(
2321
to.scaleY = from.height.toFloat() / to.height
2422
return ObjectAnimator
2523
.ofFloat(to, View.SCALE_Y, from.height.toFloat() / to.height, 1f)
26-
.setDuration(options.getDuration())
24+
.withDuration(options.getDuration())
2725
.withStartDelay(options.getStartDelay())
2826
.withInterpolator(options.interpolation.interpolator)
2927
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.core.animation.doOnStart
1010
import com.facebook.react.views.text.ReactTextView
1111
import com.reactnativenavigation.parse.SharedElementTransitionOptions
1212
import com.reactnativenavigation.utils.ViewUtils
13+
import com.reactnativenavigation.utils.withDuration
1314
import com.reactnativenavigation.utils.withInterpolator
1415
import com.reactnativenavigation.utils.withStartDelay
1516

@@ -31,7 +32,7 @@ class XAnimator(from: View, to: View) : PropertyAnimatorCreator<View>(from, to)
3132
to.translationX = dx.toFloat()
3233
return ObjectAnimator
3334
.ofFloat(to, TRANSLATION_X, dx.toFloat(), 0f)
34-
.setDuration(options.getDuration())
35+
.withDuration(options.getDuration())
3536
.withStartDelay(options.getStartDelay())
3637
.withInterpolator(options.interpolation.interpolator)
3738
}

lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.reactnativenavigation.views.element.animators
22

33
import android.animation.Animator
4-
import android.animation.AnimatorListenerAdapter
54
import android.animation.ObjectAnimator
65
import android.view.View
76
import android.view.View.TRANSLATION_Y
87
import android.view.ViewGroup
9-
import androidx.core.animation.addListener
10-
import androidx.core.animation.doOnStart
118
import com.facebook.react.views.text.ReactTextView
129
import com.reactnativenavigation.parse.SharedElementTransitionOptions
1310
import com.reactnativenavigation.utils.ViewUtils
11+
import com.reactnativenavigation.utils.withDuration
12+
1413
import com.reactnativenavigation.utils.withInterpolator
1514
import com.reactnativenavigation.utils.withStartDelay
1615

@@ -32,7 +31,7 @@ class YAnimator(from: View, to: View) : PropertyAnimatorCreator<View>(from, to)
3231
to.translationY = dy.toFloat()
3332
return ObjectAnimator
3433
.ofFloat(to, TRANSLATION_Y, dy.toFloat(), 0f)
35-
.setDuration(options.getDuration())
34+
.withDuration(options.getDuration())
3635
.withStartDelay(options.getStartDelay())
3736
.withInterpolator(options.interpolation.interpolator)
3837
}

0 commit comments

Comments
 (0)