Using the Animated.Flatlist or Animated.ScrollView to animate an Animated.View is not smooth
See original GitHub issueIs this a bug report?
Yes
Environment
react
: 16.0.0-alpha.12,react-native -v
: ^0.47.0,node -v
: v7.7.3npm -v
: 4.1.2yarn --version
: 0.21.3
-
Target Platform: iOS and Android
-
Development Operating System: macOS
-
Build tools: expo
Steps to Reproduce
- Created an animated component of FlatList.
- Used the
onScroll
function to update the animated value. - Placed a view (Animated.View) as the header above the animated FlatList using position absolute.
- Interpolate the animated value to change the view (Animated.View) using transform properties.
Expected Behavior
I saw this issue of how using scrollEventThrottle
helps the smoothness. So I thought using FlatList would be smooth.
Actual Behavior
However, when scrolling the FlatList, the animated view does animate, but the animation is not smooth. If your scroll while pressing, it’s smooth. But if you scroll and leave the finger, it’s jumpy ( I don’t know how to describe it. Sorry). The animated view (Header) animation is not smooth at all.
Reproducible Demo
Snack link for animated FlatList and animated header Animated Flat List
Update
So, I tried to implement the same functionality using ScrollView. However, I think, its even worse using ScrollView when compared to FlatList.
Here is the expo snack demo: Animated ScrollView Header
I think I need to mention how I got here at the first place. So, I tried to implement this by a very nice tutorial in Medium, and also by watching this awesome youtube react conf viedo by @brentvatne . However, the exact code used on youtube video has the same effect. Also, on the Medium tutorial, the author has given a Link to his expo Animated header link, which works very smoothly on the device. But the same code doesn’t work smoothly when I copy paste the code and test it. So, I think the problem is with the react or react native version. I will update if I have any new update. Thank you.
Issue Analytics
- State:
- Created 6 years ago
- Reactions:1
- Comments:12 (1 by maintainers)
I can reproduce this, seems like binding
Animated.Views
to ScrollView scroll position withAnimated.event
anduseNativeDriver
has gotten deoptimised on Android. It seems to mainly affect momentum scrolling, and is not noticeable while scrolling with finger held down.Doing some bisecting on Snack, seems like this broke between Expo 18 (React Native 0.45) and Expo 19 (React Native 0.46).
Between those versions, seems like there were two commits landed to Animated, both by @janicduplessis:
Neither of them seems to be the obvious candidate.
The diff is https://github.com/facebook/react-native/compare/v0.45.1...v0.46.4#diff-f048d92ca0be679bc38d38147b311100
Additional steps to reproduce:
There has been a regression with scroll events on Android. https://github.com/facebook/react-native/commit/e964a7f4ef93fcadf5cfd1c269b77b13cb3be374 fixes it, I’ll try to get it cherry picked in the next 0.48 patch.