0

我应该使用什么方法让每张卡片像火种一样向右/向左滑动?我的卡在。listview一旦我向右或向左刷任何卡,它应该消失,下一张堆叠的卡应该出现在那个地方?在 React Native 中。

卡片 UI 在列表视图中 左右刷卡 进口:

import React, { Component } from 'react';
import {
  Platform,
  StyleSheet,
  Text,
  View,Image,ListView,TouchableOpacity
} from 'react-native';
import Icon from 'react-native-vector-icons/Ionicons';
import { TabNavigator, StackNavigator } from 'react-navigation';
import { Col, Row, Grid } from 'react-native-easy-grid';
import { Container, Header, Content, Card, CardItem, Thumbnail, Button, Left, Body, Right } from 'native-base';
const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

export default class Scenes extends Component{

  static navigationOptions = {
  tabBarLabel: 'Scenes',
  tabBarIcon: ({ tintColor }) => (
      <Image
        source={require('./video.png')}
        style={[styles.icon, {tintColor: tintColor}]}
      />
    ),
  };

显示用户的功能:

  displayImages(users){
    var {navigate} = this.props.navigation;
    return(  
    <View style={styles.container}>       
        <Content style={{paddingTop: 20, borderWidth: 0, shadowOpacity: 0,
                        shadowOffset: {
                          height: 0,
                          width:0
                        },
                        shadowRadius: 0,}}>
          <Card style={{borderWidth: 0}} transparent>
            <CardItem style={{height: 48,borderWidth:0,}}>
              <Left>
                <Thumbnail source={{uri: users.avatar_url}} style={{height: 40, width: 40}} />
                <Body>
                  <Text style={styles.uploaderName}>{users.name}</Text>
                </Body>
              </Left>
              <Right>
                <Image
                  source={require('./follow.png')}
                  style={{height: 23, width: 42}}
                />
              </Right>
            </CardItem>
            <CardItem cardBody>
              <Image source={{uri: users.image}} style={{height: 322, width: null, flex: 1}}/>
            </CardItem>
            <CardItem style={{height: 48,borderWidth:0,}}>
              <Left>  
                <TouchableOpacity onPress = { () => navigate ("profile", {}) }>               
                  <Icon style={{color:'#f00039'}} name={'md-heart'} size={20}/>
                </TouchableOpacity>
                <Text style={{marginLeft:2}}>46</Text>
                <Image
                    source={require('./sharePost.png')}
                    style={{height: 20, width: 25, marginLeft: 15}}
                />
              </Left>
              <Body>
                <Button transparent>

                </Button>
              </Body>
              <Right>

              </Right>
            </CardItem>
          </Card>
        </Content> 
       </View>      
    );
  }

渲染方法:

  render() {
    var ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
    var users = [
      {
        name: 'Amy Farha',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
        image: 'https://i.pinimg.com/564x/1c/f3/05/1cf305362aed02ad559f989687b1460e.jpg',
      },
      {
        name: 'Chris Jackson',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
        image: 'https://i.pinimg.com/236x/a8/37/8e/a8378eeb01ec788a0068ea6b1b759091.jpg',
      },
      {
        name: 'Amanda Martin',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/brynn/128.jpg',
        image: 'https://i.pinimg.com/564x/8a/db/a7/8adba7207bdc82668bf06acc2734537e.jpg',
      },
      {
        name: 'Amy Farha',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
        image: 'https://i.pinimg.com/564x/8a/db/a7/8adba7207bdc82668bf06acc2734537e.jpg',
      },
      {
        name: 'Chris Jackson',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
        image: 'https://i.pinimg.com/564x/66/f0/2f/66f02f37eb54ff7f79f4c831212b231f.jpg',
      },
      {
        name: 'Amanda Martin',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/brynn/128.jpg',
        image: 'https://i.pinimg.com/564x/58/0c/78/580c789ded6ceeafdf71b792b0d57ac6.jpg',
      },
      {
        name: 'Amy Farha',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/ladylexy/128.jpg',
        image: 'https://i.pinimg.com/564x/a5/4d/4d/a54d4d37522a76a67002fa25b8e51515.jpg',
      },
      {
        name: 'Chris Jackson',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/adhamdannaway/128.jpg',
        image: 'https://i.pinimg.com/564x/47/6b/5c/476b5c4c9725ff3cd4bb3e5f61e4d6c3.jpg',
      },
      {
        name: 'Amanda Martin',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/brynn/128.jpg',
        image: 'https://i.pinimg.com/564x/ad/4b/06/ad4b06523eefacc30d09d41a9992029f.jpg',
      },
      {
        name: 'Christy Thomas',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/kfriedson/128.jpg',
        image: 'https://i.pinimg.com/564x/a5/4d/4d/a54d4d37522a76a67002fa25b8e51515.jpg',
      },
      {
        name: 'Melissa Jones',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/nuraika/128.jpg',
        image: 'https://i.pinimg.com/564x/82/ac/2e/82ac2e1c86692090173666496b9ce1cf.jpg',
      },
      {
        name: 'Amanda Martin',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/brynn/128.jpg',
        image: 'https://i.pinimg.com/564x/8a/db/a7/8adba7207bdc82668bf06acc2734537e.jpg',
      },
      {
        name: 'Christy Thomas',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/kfriedson/128.jpg',
        image: 'https://i.pinimg.com/564x/a5/4d/4d/a54d4d37522a76a67002fa25b8e51515.jpg',
      },
      {
        name: 'Melissa Jones',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/nuraika/128.jpg',
        image: 'https://i.pinimg.com/564x/ae/b6/ac/aeb6ac2f05644f1464c298bf979630e9.jpg',
      },
      {
        name: 'Christy Thomas',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/kfriedson/128.jpg',
        image: 'https://i.pinimg.com/564x/57/ac/3e/57ac3e724c61f9b9803d520574e42a1e.jpg',
      },
      {
        name: 'Melissa Jones',
        avatar_url: 'https://s3.amazonaws.com/uifaces/faces/twitter/nuraika/128.jpg',
        image: 'https://i.pinimg.com/564x/66/f0/2f/66f02f37eb54ff7f79f4c831212b231f.jpg',
      },
    ];

视图组件:

    var cloneUsers = ds.cloneWithRows(users);

    return (  
    <View style={{flex: 1}}>    
        <ListView
          style={styles.listView}
          dataSource={cloneUsers}
          renderRow={this.displayImages.bind(this)}
          renderSeparator={(sectionId, rowId) => <View key={rowId} style={styles.separator} />}
        />     

        </View>

    );  
  }
}

这是样式:

const styles = StyleSheet.create({
  icon: {
    width: 26,
    height: 26,
  },
  container: {
    flex: 1,
    backgroundColor: '#F5F5F5',
    paddingHorizontal : 25,    
  },
  uploaderName:{
    fontSize: 16,
    color: '#36292a'
  }


});
4

2 回答 2

0

要在 react-native 中制作像 Tinder 这样的滑动卡组,您可以使用一个名为react-native-swipe-decker. 这是一个非常简单的库,有一堆卡片,还有像onSwipedLeft onSwipedRight onSwipedAll. 如果您想自定义,您可以为它们中的每一个定义功能。默认情况下,所有卡片内容都需要在一个数组中,并且无论您向哪个方向滑动都会移动到下一张卡片。您还可以为其添加无限循环。您可以查看该项目的GitHub存储库并查看他们的示例。

于 2018-06-28T07:41:02.847 回答
0

在 React 中,我使用 HammerJS 来做到这一点。

ReactNative 有一个名为 PanResponder 的内置库。那里有例子。

于 2018-01-15T20:04:08.883 回答