ViewPagerAndroid

Container that allows to flip left and right between child views. Each child view of the ViewPagerAndroid will be treated as a separate page and will be streched to fill the ViewPagerAndroid.

It is important all children are <View>s and not composite components. You can set style properties like padding or backgroundColor for each child.

Example:

render: function() { return ( <ViewPagerAndroid style={styles.viewPager} initialPage={0}> <View style={styles.pageStyle}> <Text>First page</Text> </View> <View style={styles.pageStyle}> <Text>Second page</Text> </View> </ViewPagerAndroid> ); } ... var styles = { ... pageStyle: { alignItems: 'center', padding: 20, } }

Edit on GitHubProps #

initialPage number #

Index of initial page that should be selected. Use setPage method to update the page, and onPageSelected to monitor page changes

keyboardDismissMode enum('none', "on-drag") #

Determines whether the keyboard gets dismissed in response to a drag. - 'none' (the default), drags do not dismiss the keyboard. - 'on-drag', the keyboard is dismissed when a drag begins.

onPageScroll function #

Executed when transitioning between pages (ether because of animation for the requested page change or when user is swiping/dragging between pages) The event.nativeEvent object for this callback will carry following data: - position - index of first page from the left that is currently visible - offset - value from range [0,1) describing stage between page transitions. Value x means that (1 - x) fraction of the page at "position" index is visible, and x fraction of the next page is visible.

onPageSelected function #

This callback will be caleld once ViewPager finish navigating to selected page (when user swipes between pages). The event.nativeEvent object passed to this callback will have following fields: - position - index of page that has been selected

Edit on GitHubExamples #

'use strict'; var React = require('react-native'); var { Image, StyleSheet, Text, TouchableWithoutFeedback, TouchableOpacity, View, ViewPagerAndroid, } = React; var PAGES = 5; var BGCOLOR = ['#fdc08e', '#fff6b9', '#99d1b7', '#dde5fe', '#f79273']; var IMAGE_URIS = [ 'http://apod.nasa.gov/apod/image/1410/20141008tleBaldridge001h990.jpg', 'http://apod.nasa.gov/apod/image/1409/volcanicpillar_vetter_960.jpg', 'http://apod.nasa.gov/apod/image/1409/m27_snyder_960.jpg', 'http://apod.nasa.gov/apod/image/1409/PupAmulti_rot0.jpg', 'http://apod.nasa.gov/apod/image/1510/lunareclipse_27Sep_beletskycrop4.jpg', ]; var LikeCount = React.createClass({ getInitialState: function() { return { likes: 7, }; }, onClick: function() { this.setState({likes: this.state.likes + 1}); }, render: function() { var thumbsUp = '\uD83D\uDC4D'; return ( <View style={styles.likeContainer}> <TouchableOpacity onPress={this.onClick} style={styles.likeButton}> <Text style={styles.likesText}> {thumbsUp + ' Like'} </Text> </TouchableOpacity> <Text style={styles.likesText}> {this.state.likes + ' likes'} </Text> </View> ); }, }); var Button = React.createClass({ _handlePress: function() { if (this.props.enabled && this.props.onPress) { this.props.onPress(); } }, render: function() { return ( <TouchableWithoutFeedback onPress={this._handlePress}> <View style={[styles.button, this.props.enabled ? {} : styles.buttonDisabled]}> <Text style={styles.buttonText}>{this.props.text}</Text> </View> </TouchableWithoutFeedback> ); } }); var ProgressBar = React.createClass({ render: function() { var fractionalPosition = (this.props.progress.position + this.props.progress.offset); var progressBarSize = (fractionalPosition / (PAGES - 1)) * this.props.size; return ( <View style={[styles.progressBarContainer, {width: this.props.size}]}> <View style={[styles.progressBar, {width: progressBarSize}]}/> </View> ); } }); var ViewPagerAndroidExample = React.createClass({ statics: { title: '<ViewPagerAndroid>', description: 'Container that allows to flip left and right between child views.' }, getInitialState: function() { return {page: 0, progress: {position: 0, offset: 0}}; }, onPageSelected: function(e) { this.setState({page: e.nativeEvent.position}); }, onPageScroll: function(e) { this.setState({progress: e.nativeEvent}); }, move: function(delta) { var page = this.state.page + delta; this.viewPager && this.viewPager.setPage(page); this.setState({page}); }, go: function(page) { this.viewPager && this.viewPager.setPage(page); this.setState({page}); }, render: function() { var pages = []; for (var i = 0; i < PAGES; i++) { var pageStyle = { backgroundColor: BGCOLOR[i % BGCOLOR.length], alignItems: 'center', padding: 20, }; pages.push( <View key={i} style={pageStyle} collapsable={false}> <Image style={styles.image} source={{uri: IMAGE_URIS[i % BGCOLOR.length]}} /> <LikeCount /> </View> ); } var page = this.state.page; return ( <View style={styles.container}> <ViewPagerAndroid style={styles.viewPager} initialPage={0} onPageScroll={this.onPageScroll} onPageSelected={this.onPageSelected} ref={viewPager => { this.viewPager = viewPager; }}> {pages} </ViewPagerAndroid> <View style={styles.buttons}> <Button text="Start" enabled={page > 0} onPress={() => this.go(0)}/> <Button text="Prev" enabled={page > 0} onPress={() => this.move(-1)}/> <Text style={styles.buttonText}>Page {page + 1} / {PAGES}</Text> <ProgressBar size={100} progress={this.state.progress}/> <Button text="Next" enabled={page < PAGES - 1} onPress={() => this.move(1)}/> <Button text="Last" enabled={page < PAGES - 1} onPress={() => this.go(PAGES - 1)}/> </View> </View> ); }, }); var styles = StyleSheet.create({ buttons: { flexDirection: 'row', height: 30, backgroundColor: 'black', alignItems: 'center', justifyContent: 'space-between', }, button: { flex: 1, width: 0, margin: 5, borderColor: 'gray', borderWidth: 1, backgroundColor: 'gray', }, buttonDisabled: { backgroundColor: 'black', opacity: 0.5, }, buttonText: { color: 'white', }, container: { flex: 1, backgroundColor: 'white', }, image: { width: 300, height: 200, padding: 20, }, likeButton: { backgroundColor: 'rgba(0, 0, 0, 0.1)', borderColor: '#333333', borderWidth: 1, borderRadius: 5, flex: 1, margin: 8, padding: 8, }, likeContainer: { flexDirection: 'row', }, likesText: { flex: 1, fontSize: 18, alignSelf: 'center', }, progressBarContainer: { height: 10, margin: 10, borderColor: '#eeeeee', borderWidth: 2, }, progressBar: { alignSelf: 'flex-start', flex: 1, backgroundColor: '#eeeeee', }, viewPager: { flex: 1, }, }); module.exports = ViewPagerAndroidExample;