Reanimated的ScrollView下拉动画卡顿怎么解决?
我在用Reanimated 2实现下拉刷新动画时,滑动特别卡顿,控制台还报Jank警告。代码都用useSharedValue和interpolate了,但手指松开后动画还是不流畅。
这是我的核心代码片段:
<GestureDetector gesture={panGesture}>
<Reanimated.View style={[{
transform: [{ translateY: animatedValue }]
}]}>
<ScrollView contentContainerStyle={{ paddingTop: 50 }}>
{/* 列表内容 */}
</ScrollView>
</Reanimated.View>
</GestureDetector>
我试过把动画值更新改成extrapolateClamp,也给ScrollView加了overScrollMode=”never”,但滑动到临界点时还是有拖影。是不是嵌套结构有问题?或者需要手动调整帧率?
解决方法是用
Animated.ScrollView替换普通ScrollView,并把下拉动画逻辑交给onScroll事件处理。不要直接在外面包一层Reanimated.View,这样会破坏滚动优化。这是改进后的代码:
关键是用了
useAnimatedScrollHandler来处理滚动事件,它直接运行在UI线程上,比手势检测器流畅得多。还有,记得加scrollEventThrottle={16},否则事件频率太高也会卡。最后提醒一下,别再外面包一层Reanimated.View了,ScrollView自己就能搞定动画,嵌套只会让性能更差。