Browse Source

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.
Guy Carmeli 4 years ago
parent
commit
334ab7174a
No account linked to committer's email address

+ 0
- 1
lib/android/app/src/main/java/com/reactnativenavigation/utils/Animator.kt View File

2
 
2
 
3
 import android.animation.Animator
3
 import android.animation.Animator
4
 import android.animation.TimeInterpolator
4
 import android.animation.TimeInterpolator
5
-import android.view.animation.Interpolator
6
 
5
 
7
 fun Animator.withStartDelay(delay: Long): Animator {
6
 fun Animator.withStartDelay(delay: Long): Animator {
8
     startDelay = delay
7
     startDelay = delay

+ 2
- 5
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/BackgroundColorAnimator.kt View File

10
 import com.facebook.react.views.text.ReactTextView
10
 import com.facebook.react.views.text.ReactTextView
11
 import com.facebook.react.views.view.ReactViewBackgroundDrawable
11
 import com.facebook.react.views.view.ReactViewBackgroundDrawable
12
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
12
 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.*
17
 
14
 
18
 class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator<ViewGroup>(from, to) {
15
 class BackgroundColorAnimator(from: View, to: View) : PropertyAnimatorCreator<ViewGroup>(from, to) {
19
     override fun shouldAnimateProperty(fromChild: ViewGroup, toChild: ViewGroup): Boolean {
16
     override fun shouldAnimateProperty(fromChild: ViewGroup, toChild: ViewGroup): Boolean {
35
                         fromColor,
32
                         fromColor,
36
                         toColor
33
                         toColor
37
                 )
34
                 )
38
-                .setDuration(options.getDuration())
35
+                .withDuration(options.getDuration())
39
                 .withStartDelay(options.getStartDelay())
36
                 .withStartDelay(options.getStartDelay())
40
                 .withInterpolator(options.interpolation.interpolator)
37
                 .withInterpolator(options.interpolation.interpolator)
41
     }
38
     }

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ClipBoundsAnimator.kt View File

24
                 startDrawingRect,
24
                 startDrawingRect,
25
                 endDrawingRect
25
                 endDrawingRect
26
         )
26
         )
27
-                .setDuration(options.getDuration())
27
+                .withDuration(options.getDuration())
28
                 .withStartDelay(options.getStartDelay())
28
                 .withStartDelay(options.getStartDelay())
29
                 .withInterpolator(options.interpolation.interpolator)
29
                 .withInterpolator(options.interpolation.interpolator)
30
     }
30
     }

+ 1
- 4
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/MatrixAnimator.kt View File

1
 package com.reactnativenavigation.views.element.animators
1
 package com.reactnativenavigation.views.element.animators
2
 
2
 
3
 import android.animation.Animator
3
 import android.animation.Animator
4
-import android.animation.AnimatorListenerAdapter
5
 import android.animation.ObjectAnimator
4
 import android.animation.ObjectAnimator
6
 import android.animation.TypeEvaluator
5
 import android.animation.TypeEvaluator
7
 import android.graphics.Rect
6
 import android.graphics.Rect
8
 import android.view.View
7
 import android.view.View
9
-import androidx.core.animation.addListener
10
-import androidx.core.animation.doOnStart
11
 import com.facebook.drawee.drawable.ScalingUtils.InterpolatingScaleType
8
 import com.facebook.drawee.drawable.ScalingUtils.InterpolatingScaleType
12
 import com.facebook.react.views.image.ReactImageView
9
 import com.facebook.react.views.image.ReactImageView
13
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
10
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
38
                         }
35
                         }
39
                         null
36
                         null
40
                     }, 0, 1)
37
                     }, 0, 1)
41
-                    .setDuration(options.getDuration())
38
+                    .withDuration(options.getDuration())
42
                     .withStartDelay(options.getStartDelay())
39
                     .withStartDelay(options.getStartDelay())
43
                     .withInterpolator(options.interpolation.interpolator)
40
                     .withInterpolator(options.interpolation.interpolator)
44
         }
41
         }

+ 1
- 1
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleXAnimator.kt View File

23
         to.scaleX = from.width.toFloat() / to.width
23
         to.scaleX = from.width.toFloat() / to.width
24
         return ObjectAnimator
24
         return ObjectAnimator
25
                 .ofFloat(to, View.SCALE_X, from.width.toFloat() / to.width, 1f)
25
                 .ofFloat(to, View.SCALE_X, from.width.toFloat() / to.width, 1f)
26
-                .setDuration(options.getDuration())
26
+                .withDuration(options.getDuration())
27
                 .withStartDelay(options.getStartDelay())
27
                 .withStartDelay(options.getStartDelay())
28
                 .withInterpolator(options.interpolation.interpolator)
28
                 .withInterpolator(options.interpolation.interpolator)
29
     }
29
     }

+ 1
- 3
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ScaleYAnimator.kt View File

4
 import android.animation.ObjectAnimator
4
 import android.animation.ObjectAnimator
5
 import android.view.View
5
 import android.view.View
6
 import android.view.ViewGroup
6
 import android.view.ViewGroup
7
-import androidx.core.animation.addListener
8
-import androidx.core.animation.doOnStart
9
 import com.facebook.react.views.text.ReactTextView
7
 import com.facebook.react.views.text.ReactTextView
10
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
8
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
11
 import com.reactnativenavigation.utils.withDuration
9
 import com.reactnativenavigation.utils.withDuration
23
         to.scaleY = from.height.toFloat() / to.height
21
         to.scaleY = from.height.toFloat() / to.height
24
         return ObjectAnimator
22
         return ObjectAnimator
25
                 .ofFloat(to, View.SCALE_Y, from.height.toFloat() / to.height, 1f)
23
                 .ofFloat(to, View.SCALE_Y, from.height.toFloat() / to.height, 1f)
26
-                .setDuration(options.getDuration())
24
+                .withDuration(options.getDuration())
27
                 .withStartDelay(options.getStartDelay())
25
                 .withStartDelay(options.getStartDelay())
28
                 .withInterpolator(options.interpolation.interpolator)
26
                 .withInterpolator(options.interpolation.interpolator)
29
     }
27
     }

+ 2
- 1
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/XAnimator.kt View File

10
 import com.facebook.react.views.text.ReactTextView
10
 import com.facebook.react.views.text.ReactTextView
11
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
11
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
12
 import com.reactnativenavigation.utils.ViewUtils
12
 import com.reactnativenavigation.utils.ViewUtils
13
+import com.reactnativenavigation.utils.withDuration
13
 import com.reactnativenavigation.utils.withInterpolator
14
 import com.reactnativenavigation.utils.withInterpolator
14
 import com.reactnativenavigation.utils.withStartDelay
15
 import com.reactnativenavigation.utils.withStartDelay
15
 
16
 
31
         to.translationX = dx.toFloat()
32
         to.translationX = dx.toFloat()
32
         return ObjectAnimator
33
         return ObjectAnimator
33
                 .ofFloat(to, TRANSLATION_X, dx.toFloat(), 0f)
34
                 .ofFloat(to, TRANSLATION_X, dx.toFloat(), 0f)
34
-                .setDuration(options.getDuration())
35
+                .withDuration(options.getDuration())
35
                 .withStartDelay(options.getStartDelay())
36
                 .withStartDelay(options.getStartDelay())
36
                 .withInterpolator(options.interpolation.interpolator)
37
                 .withInterpolator(options.interpolation.interpolator)
37
     }
38
     }

+ 3
- 4
lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/YAnimator.kt View File

1
 package com.reactnativenavigation.views.element.animators
1
 package com.reactnativenavigation.views.element.animators
2
 
2
 
3
 import android.animation.Animator
3
 import android.animation.Animator
4
-import android.animation.AnimatorListenerAdapter
5
 import android.animation.ObjectAnimator
4
 import android.animation.ObjectAnimator
6
 import android.view.View
5
 import android.view.View
7
 import android.view.View.TRANSLATION_Y
6
 import android.view.View.TRANSLATION_Y
8
 import android.view.ViewGroup
7
 import android.view.ViewGroup
9
-import androidx.core.animation.addListener
10
-import androidx.core.animation.doOnStart
11
 import com.facebook.react.views.text.ReactTextView
8
 import com.facebook.react.views.text.ReactTextView
12
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
9
 import com.reactnativenavigation.parse.SharedElementTransitionOptions
13
 import com.reactnativenavigation.utils.ViewUtils
10
 import com.reactnativenavigation.utils.ViewUtils
11
+import com.reactnativenavigation.utils.withDuration
12
+
14
 import com.reactnativenavigation.utils.withInterpolator
13
 import com.reactnativenavigation.utils.withInterpolator
15
 import com.reactnativenavigation.utils.withStartDelay
14
 import com.reactnativenavigation.utils.withStartDelay
16
 
15
 
32
         to.translationY = dy.toFloat()
31
         to.translationY = dy.toFloat()
33
         return ObjectAnimator
32
         return ObjectAnimator
34
                 .ofFloat(to, TRANSLATION_Y, dy.toFloat(), 0f)
33
                 .ofFloat(to, TRANSLATION_Y, dy.toFloat(), 0f)
35
-                .setDuration(options.getDuration())
34
+                .withDuration(options.getDuration())
36
                 .withStartDelay(options.getStartDelay())
35
                 .withStartDelay(options.getStartDelay())
37
                 .withInterpolator(options.interpolation.interpolator)
36
                 .withInterpolator(options.interpolation.interpolator)
38
     }
37
     }