react-native-snap-carousel 사용하기

10112 단어 reactnative

하고 싶은 일


  • ReactNative 화면에 회전 목마를 넣고 싶습니다 (광고 배너에서의 사용을 이미지)



  • 준비



    react-native-snap-carousel 을 사용해 보겠습니다. loop이나 autoplay라든지 할 수 있어 편리해 보인다.
    npm install --save react-native-snap-carousel
    

    구현



    귀찮기 때문에 App.js에 전부 써 보겠습니다.

    App.js



    App.js
    import React from 'react';
    import { StyleSheet, Text, View, Dimensions, SafeAreaView, TouchableHighlight, Image, Linking } from 'react-native';
    import Carousel, { Pagination } from 'react-native-snap-carousel';
    
    export default class App extends React.Component {
    
        state = {
            data: [
                { title: 'a', url: 'http://www.bluecode.jp/images/A.png' },
                { title: 'b', url: 'http://www.bluecode.jp/images/B.png' },
                { title: 'c', url: 'http://www.bluecode.jp/images/C.png' },
                { title: 'd', url: 'http://www.bluecode.jp/images/D.png' },
                { title: 'e', url: 'http://www.bluecode.jp/images/E.png' },
            ],
            activeSlide: 0,
        }
    
    
        //カルーセルの中身
        _renderItem = ({ item, index }) => {
            return (
                <TouchableHighlight
                    onPress={() => Linking.openURL(item.url)}
                >
                    <Image source={{ url: item.url }} style={{ width: '100%', height: '100%' }} />
                </TouchableHighlight>
            );
        }
    
        render() {
            return (
                <SafeAreaView style={{ height: 240 }}>
                    <Carousel
                        data={this.state.data}
                        renderItem={this._renderItem}
                        itemWidth={Dimensions.get("window").width * 0.6}
                        sliderWidth={Dimensions.get("window").width * 1.0}
                        // containerCustomStyle={{ flex: 1, backgroundColor: "#eee" }}
                        onSnapToItem={index => this.setState({ activeSlide: index })} //for pagination
                        loop
                        autoplay
                    />
                    <Pagination
                        dotsLength={this.state.data.length} //dotの数
                        activeDotIndex={this.state.activeSlide} //どのdotをactiveにするか
                        containerStyle={{paddingVertical:15}} //デフォルトではちと広い
                    />
                </SafeAreaView>
            );
        }
    }
    
    

    좋은 웹페이지 즐겨찾기