-
-
Notifications
You must be signed in to change notification settings - Fork 519
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[android] stack screen transition lag on 3.30.1 #2100
Comments
Hi @lovegaoshi, do you think you could provide us with recordings of how this looks? I'm looking now for differences but cant spot one. |
Thank you so much for taking a look @kkafar and sorry for not posting them earlier, here is 3.30.1 with the lag And 3.29.0 without lag There is no code difference other than the dep downgrade; device is pixel7 but also shows on samsung s21 |
This looks like an issue with screen transitioning and draw ordering - we may need to check if this commit may cause this 😕 |
perhaps its |
Yeah, most likely that's because of the transition duration. However, what's even stranger, I can see that on both versions of screens this lag exists (it's shorter on 3.29.0, though). Can you also spot the same artifacts @lovegaoshi? 3.29.0: 8mb.video-K1w-buxToaRw.mp43.29.0 (detailed version): 8mb.video-N7o-IkgfSo38.mp43.30.1: 8mb.video-05B-Egpt609f.mp4 |
thank you so much @tboba for the thorough investigation, yes that's what I see as well; now with the pointed out commit it makes sense to me that both have "lags," 29.0 has a smaller "lag" with a 80ms duration and 30.1 is much more noticeable with a 450ms duration. |
Hi @lovegaoshi! Could you check if installing screens version from this branch: #2110 fixes this issue? |
hi @tboba thank you so much for the fix! I tried to patch android:duration into a smaller value but it didnt seem to make a difference on an emulator, yet to try with a real device. Also I tried to install from branch #2110 and I don't think I got it right, it's missing React: do I just clone, yarn, yarn prepare and cp/link the cloned repo to my node_modules?
|
@lovegaoshi hmm, I believe you need to do |
my sincere apologies, I dont seem to get this at all:S If I clone, yarn, yarn prepare, then cp to node_modules, build succeeds but I got the above (React is null);
|
@lovegaoshi use patch-package and apply this patch, please note it's for
Click mediff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt
index b31e378..acfe9ad 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/Screen.kt
@@ -278,4 +278,9 @@ class Screen(context: ReactContext?) : FabricEnabledViewGroup(context) {
enum class WindowTraits {
ORIENTATION, COLOR, STYLE, TRANSLUCENT, HIDDEN, ANIMATED, NAVIGATION_BAR_COLOR, NAVIGATION_BAR_HIDDEN
}
+ companion object {
+ fun isSystemAnimation(stackAnimation: StackAnimation): Boolean {
+ return stackAnimation === StackAnimation.DEFAULT || stackAnimation === StackAnimation.FADE || stackAnimation === StackAnimation.NONE
+ }
+ }
}
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt
index 3915dd6..2fc1ac4 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt
@@ -272,7 +272,7 @@ open class ScreenFragment : Fragment, ScreenFragmentWrapper {
// onViewAnimationStart/End is triggered from View#onAnimationStart/End method of the fragment's root
// view. We override an appropriate method of the StackFragment's
// root view in order to achieve this.
- if (isResumed) {
+ if (isResumed || screen.container?.topScreen === screen) {
// Android dispatches the animation start event for the fragment that is being added first
// however we want the one being dismissed first to match iOS. It also makes more sense from
// a navigation point of view to have the disappear event first.
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt
index 458465c..e12136e 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt
@@ -4,6 +4,7 @@ import android.content.Context
import android.graphics.Canvas
import android.os.Build
import android.view.View
+import androidx.fragment.app.FragmentTransaction
import com.facebook.react.bridge.ReactContext
import com.facebook.react.uimanager.UIManagerHelper
import com.swmansion.rnscreens.Screen.StackAnimation
@@ -139,9 +140,9 @@ class ScreenStack(context: Context?) : ScreenContainer(context) {
if (stackAnimation != null) {
if (shouldUseOpenAnimation) {
when (stackAnimation) {
- StackAnimation.DEFAULT -> it.setCustomAnimations(R.anim.rns_default_enter_in, R.anim.rns_default_enter_out)
- StackAnimation.NONE -> it.setCustomAnimations(R.anim.rns_no_animation_20, R.anim.rns_no_animation_20)
- StackAnimation.FADE -> it.setCustomAnimations(R.anim.rns_fade_in, R.anim.rns_fade_out)
+ StackAnimation.DEFAULT -> it.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
+ StackAnimation.NONE -> it.setTransition(FragmentTransaction.TRANSIT_NONE)
+ StackAnimation.FADE -> it.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
StackAnimation.SLIDE_FROM_RIGHT -> it.setCustomAnimations(R.anim.rns_slide_in_from_right, R.anim.rns_slide_out_to_left)
StackAnimation.SLIDE_FROM_LEFT -> it.setCustomAnimations(R.anim.rns_slide_in_from_left, R.anim.rns_slide_out_to_right)
StackAnimation.SLIDE_FROM_BOTTOM -> it.setCustomAnimations(
@@ -152,9 +153,9 @@ class ScreenStack(context: Context?) : ScreenContainer(context) {
}
} else {
when (stackAnimation) {
- StackAnimation.DEFAULT -> it.setCustomAnimations(R.anim.rns_default_exit_in, R.anim.rns_default_exit_out)
- StackAnimation.NONE -> it.setCustomAnimations(R.anim.rns_no_animation_20, R.anim.rns_no_animation_20)
- StackAnimation.FADE -> it.setCustomAnimations(R.anim.rns_fade_in, R.anim.rns_fade_out)
+ StackAnimation.DEFAULT -> it.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)
+ StackAnimation.NONE -> it.setTransition(FragmentTransaction.TRANSIT_NONE)
+ StackAnimation.FADE -> it.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
StackAnimation.SLIDE_FROM_RIGHT -> it.setCustomAnimations(R.anim.rns_slide_in_from_left, R.anim.rns_slide_out_to_right)
StackAnimation.SLIDE_FROM_LEFT -> it.setCustomAnimations(R.anim.rns_slide_in_from_right, R.anim.rns_slide_out_to_left)
StackAnimation.SLIDE_FROM_BOTTOM -> it.setCustomAnimations(
diff --git a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt
index 48ff684..cdf2896 100644
--- a/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt
+++ b/node_modules/react-native-screens/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt
@@ -1,5 +1,9 @@
package com.swmansion.rnscreens
+import android.animation.Animator
+import android.animation.AnimatorInflater
+import android.animation.AnimatorListenerAdapter
+import android.animation.AnimatorSet
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Color
@@ -16,6 +20,9 @@ import android.view.animation.Transformation
import android.widget.LinearLayout
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.fragment.R
+import androidx.fragment.app.FragmentTransaction
+import com.facebook.react.bridge.UiThreadUtil
import com.facebook.react.uimanager.PixelUtil
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.appbar.AppBarLayout.ScrollingViewBehavior
@@ -86,6 +93,53 @@ class ScreenStackFragment : ScreenFragment, ScreenStackFragmentWrapper {
notifyViewAppearTransitionEnd()
}
+ // Similarly to ScreensCoordinatorLayout, this method listens only for the phases of default Android
+ // transitions (default/none/fade), since `ScreensCoordinatorLayout#startAnimation` is being
+ // called only for custom animations.
+ override fun onCreateAnimator(transit: Int, enter: Boolean, nextAnim: Int): Animator? {
+ val listener = object : AnimatorListenerAdapter() {
+ override fun onAnimationStart(animation: Animator) {
+ onViewAnimationStart()
+ super.onAnimationStart(animation)
+ }
+
+ override fun onAnimationEnd(animation: Animator) {
+ onViewAnimationEnd()
+ super.onAnimationEnd(animation)
+ }
+ }
+
+ // If there's custom animation set, use default onCreateAnimator implementation, as event
+ // handling will be handled by ScreensCoordinatorLayout.
+ if (!Screen.isSystemAnimation(screen.stackAnimation)) {
+ return super.onCreateAnimator(transit, enter, nextAnim)
+ }
+
+ // When fragment is being removed or there's no transition selected, we simply
+ // return AnimatorSet without any animation.
+ if (isRemoving || transit == FragmentTransaction.TRANSIT_NONE) {
+ return AnimatorSet().apply {
+ addListener(listener)
+ }
+ }
+
+ var selectedNextAnim = nextAnim
+ if (nextAnim == 0) {
+ selectedNextAnim = when (transit) {
+ FragmentTransaction.TRANSIT_FRAGMENT_OPEN -> if (enter) R.animator.fragment_open_enter else R.animator.fragment_open_exit
+ FragmentTransaction.TRANSIT_FRAGMENT_CLOSE -> if (enter) R.animator.fragment_close_enter else R.animator.fragment_close_exit
+ FragmentTransaction.TRANSIT_FRAGMENT_FADE -> if (enter) R.animator.fragment_fade_enter else R.animator.fragment_fade_exit
+ else -> 0
+ }
+ }
+
+ val animator = AnimatorInflater.loadAnimator(context, selectedNextAnim).apply {
+ addListener(listener)
+ }
+
+ return animator
+ }
+
private fun notifyViewAppearTransitionEnd() {
val screenStack = view?.parent
if (screenStack is ScreenStack) {
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_in.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_in.xml
deleted file mode 100644
index 4398c7e..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_in.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android">
- <alpha
- android:interpolator="@android:interpolator/accelerate_decelerate"
- android:fromAlpha="0"
- android:toAlpha="1.0"
- android:startOffset="100"
- android:duration="100"/>
- <scale
- android:interpolator="@android:interpolator/accelerate_decelerate"
- android:fromXScale="0.85"
- android:toXScale="1"
- android:fromYScale="0.85"
- android:toYScale="1"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="200"/>
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_out.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_out.xml
deleted file mode 100644
index 84c9175..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_enter_out.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android">
- <alpha
- android:fromAlpha="1"
- android:toAlpha="0.4"
- android:startOffset="100"
- android:duration="100"
- android:interpolator="@android:interpolator/accelerate_decelerate" />
-
- <scale
- android:interpolator="@android:interpolator/accelerate_decelerate"
- android:fromXScale="1"
- android:toXScale="1.15"
- android:fromYScale="1"
- android:toYScale="1.15"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="200"/>
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_in.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_in.xml
deleted file mode 100644
index 6d6fa02..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_in.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
- <alpha
- android:fromAlpha="0.0"
- android:toAlpha="1"
- android:startOffset="50"
- android:duration="100"/>
- <scale
- android:fromXScale="1.15"
- android:toXScale="1"
- android:fromYScale="1.15"
- android:toYScale="1"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="200"/>
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_out.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_out.xml
deleted file mode 100644
index b20a184..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_default_exit_out.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false"
- android:zAdjustment="top">
- <alpha
- android:fromAlpha="1"
- android:toAlpha="0.0"
- android:startOffset="50"
- android:duration="100"/>
- <scale
- android:fromXScale="1"
- android:toXScale="0.85"
- android:fromYScale="1"
- android:toYScale="0.85"
- android:pivotX="50%"
- android:pivotY="50%"
- android:duration="200"/>
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_in.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_in.xml
deleted file mode 100644
index c78ea61..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_in.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--Duration taken from debugging source code-->
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromAlpha="0.0"
- android:toAlpha="1.0"
- android:duration="150"
- /> <!--Remember to change duration in the corresponding xml when modifying it-->
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_to_bottom.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_to_bottom.xml
index 2334521..3b7e7a1 100644
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_to_bottom.xml
+++ b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_fade_to_bottom.xml
@@ -2,14 +2,14 @@
<!--Android Nougat exit animation-->
<!--http://aosp.opersys.com/xref/android-7.1.2_r37/xref/frameworks/base/core/res/res/anim/activity_close_exit.xml-->
<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
+ android:shareInterpolator="false">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:interpolator="@android:interpolator/linear"
- android:startOffset="100"
- android:duration="150"/>
+ android:interpolator="@android:interpolator/linear"
+ android:startOffset="100"
+ android:duration="150"/>
<translate android:fromYDelta="0%" android:toYDelta="8%"
- android:interpolator="@android:interpolator/accelerate_quint"
- android:duration="250"/> <!--we use rns_no_animation_250.xml as the other animation for
+ android:interpolator="@android:interpolator/accelerate_quint"
+ android:duration="250"/> <!--we use rns_no_animation_250.xml as the other animation for
this transition since we want both of them to end at the same time. Remember to change
duration in both files when modifying it-->
</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_no_animation_20.xml b/node_modules/react-native-screens/android/src/main/res/base/anim/rns_no_animation_20.xml
deleted file mode 100644
index 5cc0d23..0000000
--- a/node_modules/react-native-screens/android/src/main/res/base/anim/rns_no_animation_20.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<alpha xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromAlpha="1.0"
- android:toAlpha="1.0"
- android:duration="20"
- /> <!-- non-zero duration ensures transition events are triggered correctly -->
diff --git a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml b/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml
deleted file mode 100644
index 1767203..0000000
--- a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_in.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
-
- <alpha
- android:fromAlpha="0.0"
- android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:anim/linear_interpolator"
- android:startOffset="50"
- android:duration="83" />
-
- <translate
- android:fromXDelta="10%"
- android:toXDelta="0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:duration="450" />
-
- <extend
- android:fromExtendLeft="10%"
- android:fromExtendTop="0"
- android:fromExtendRight="0"
- android:fromExtendBottom="0"
- android:toExtendLeft="10%"
- android:toExtendTop="0"
- android:toExtendRight="0"
- android:toExtendBottom="0"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml b/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml
deleted file mode 100644
index e7dd72b..0000000
--- a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_enter_out.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
-
- <alpha
- android:fromAlpha="1.0"
- android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@anim/rns_standard_accelerate_interpolator"
- android:startOffset="0"
- android:duration="450" />
-
- <translate
- android:fromXDelta="0"
- android:toXDelta="-10%"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-
- <extend
- android:fromExtendLeft="0"
- android:fromExtendTop="0"
- android:fromExtendRight="10%"
- android:fromExtendBottom="0"
- android:toExtendLeft="0"
- android:toExtendTop="0"
- android:toExtendRight="10%"
- android:toExtendBottom="0"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml b/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml
deleted file mode 100644
index 949ebb7..0000000
--- a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_in.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
-
- <alpha
- android:fromAlpha="1.0"
- android:toAlpha="1.0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/linear"
- android:startOffset="0"
- android:duration="450" />
-
- <translate
- android:fromXDelta="-10%"
- android:toXDelta="0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-
- <extend
- android:fromExtendLeft="0"
- android:fromExtendTop="0"
- android:fromExtendRight="10%"
- android:fromExtendBottom="0"
- android:toExtendLeft="0"
- android:toExtendTop="0"
- android:toExtendRight="10%"
- android:toExtendBottom="0"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-</set>
diff --git a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml b/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml
deleted file mode 100644
index ba4d84d..0000000
--- a/node_modules/react-native-screens/android/src/main/res/v33/anim-v33/rns_default_exit_out.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:shareInterpolator="false">
-
- <alpha
- android:fromAlpha="1.0"
- android:toAlpha="0.0"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/linear"
- android:startOffset="35"
- android:duration="83" />
-
- <translate
- android:fromXDelta="0"
- android:toXDelta="10%"
- android:fillEnabled="true"
- android:fillBefore="true"
- android:fillAfter="true"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-
- <extend
- android:fromExtendLeft="10%"
- android:fromExtendTop="0"
- android:fromExtendRight="0"
- android:fromExtendBottom="0"
- android:toExtendLeft="10%"
- android:toExtendTop="0"
- android:toExtendRight="0"
- android:toExtendBottom="0"
- android:interpolator="@android:interpolator/fast_out_extra_slow_in"
- android:startOffset="0"
- android:duration="450" />
-</set> @tboba looks good to me, tested on Android simulators from version 8 up to 14 |
thanks a lot! works on my end, I see the bring forward/backward animation I think I saw in android 12 instead of the sliding one from macs |
saw the 3.32.0 update but this issue still lingers :( |
Description
Hello!
I'm using @react-navigation/native-stack's createNativeStackNavigator to create stacks of screens. Since I upgraded to react-native-screens to 3.30.1, I noticed a (more) noticeable lag of the previous screen when navigating to the next screen on android; downgrading to 3.29.0 "fixes" this lag. This is quite vague and I have no clue what could be the reason, thanks a lot in advance if anyone wouldnt mind taking a look at it!
Steps to reproduce
build https://github.com/lovegaoshi/azusa-player-mobile/releases/tag/dev-build-2024-04-10 uses 3.30.1.
https://github.com/lovegaoshi/azusa-player-mobile/releases/tag/dev-build-2024-04-11 uses 3.29.0.
the left hamburger menu -> settings -> navigate to any screen shows it.
Snack or a link to a repository
https://github.com/lovegaoshi/azusa-player-mobile/tree/ee9c096a7bf56b97a415f3b1e363096ed0730163
Screens version
3.30.1/3.29.0
React Native version
0.73.6
Platforms
Android
JavaScript runtime
Hermes
Workflow
React Native (without Expo)
Architecture
Paper (Old Architecture)
Build type
Release mode
Device
Real device
Device model
Samsung S21 (android 14)
Acknowledgements
Yes
The text was updated successfully, but these errors were encountered: