使用 React Native 的 FlatList 的 Swiper

Swiper using React Native's FlatList

我想让我的水平 FlatList(启用分页)向左或向右滚动,使内容始终位于屏幕中央,并且下一个和上一个内容仍然显示。

像这样(水平动作)

但不幸的是,当平面列表滚动时,滚动的长度与平面列表或其父级的宽度相同,我无法达到我想要的效果。

为此使用图书馆可能会更好。我已经使用 react-native-carousel 在相同的用例中取得了成功。 Github here。您的代码看起来像这样:

import Carousel from 'react-native-carousel'

getListItems() {
   return [ <View>...</View>, <View>...</View>]
}

render() {
   return (
      <Carousel>
         {this.getListItems()}
      </Carousel>
   )
}

我们公司有类似的需求,但是 none 的现有插件完全满足了我们的用例。我们最终创建了自己的资源并将其开源:react-native-snap-carousel.

该插件现在构建在 FlatList(版本 >= 3.0.0)之上,并提供 预览(您想要的效果),捕捉效果视差图像RTL 支持 等。

您可以查看 showcase 以了解它可以实现什么。如果您决定尝试一下,请随时与我们分享您的反馈;我们一直在努力改进它。


编辑:two new layouts 已在版本 3.6.0 中引入(一个具有一堆纸牌效果,另一个具有类似火种的效果)。享受吧!

我使用了 react-native-snap-carousel,虽然动画和自定义非常好,但它真的很难设置样式,因为它的行为不像普通视图,而且它不能在 ScrollView 中正确呈现。

相反,我根据 this page

的一些说明恢复为普通的 FlatList

设置:

<FlatList
    data={this.data}
    renderItem={this._renderItem}
    keyExtractor={this._keyExtractor}
    horizontal={true} // row instead of column
    // Add the 4 properties below for snapping
    snapToAlignment={"start"} 
    snapToInterval={this.IMAGE_WIDTH + 10} // Adjust to your content width
    decelerationRate={"fast"}
    pagingEnabled
/>