美文网首页iOS精华程序员IT共论
React Native之旅05-控件ViewPagerAndr

React Native之旅05-控件ViewPagerAndr

作者: 晓峰残月 | 来源:发表于2016-02-03 15:05 被阅读360次

    1、ViewPagerAndroid介绍

    是一个允许在子视图之间左右翻页的容器。每一个ViewPagerAndroid的子容器会被视作一个单独的页,并且会被拉伸填满ViewPagerAndroid。
    注意所有的子视图都必须是纯View,而不能是自定义的复合容器。可以给每个子视图设置样式属性,如padding或backgroundColor等。

    2、ViewPagerAndroid的用法

    1. initialPage number
      初始选中的页的下标。你可以用setPage函数来翻页
    2. keyboardDismissMode enum('none', 'on-drag')
      决定在滑动的时候是否要让软键盘消失。
      none:不会消失
      on-drag:当拖拽开始的时候会让键盘消失。
    3. onPageScroll
      当在页间切换时不管是由于动画还是由于用户在页间滑动/拖拽都会执行。
      回调参数中的event.nativeEvent对象会包含如下数据:
      position:页面的下标
      offset:偏移量,在0-1之间。值x表示现在"position"所表示的页有(1 - x)的部分可见,而下一页有x的部分可见。
    4. onPageScrollStateChanged
      页面滑动状态变化时调用此回调函数。页面滑动状态可能为以下三种的一种
      idle:空闲,意味着当前没有交互。
      dragging:拖动中,意味着当前页面正在被拖动。
      settling:处理中,意味着当前页面发生过交互,且正在结束开头或收尾的动画。
    5. onPageSelected
      这个回调会在页面切换完成后(当用户在页面间滑动)调用
      回调参数中的event.nativeEvent对象会包含如下数据:
      position:页面的下标

    3、ViewPagerAndroid实例

    仿美团头部的分类,图如下:

    第一页 第二页

    具体代码:

    /**
     * Sample React Native App
     * https://github.com/facebook/react-native
     */
    'use strict';
    import React,
    {
        AppRegistry,
        Component,
        StyleSheet,
        Text,
        Image,
        View,
        ViewPagerAndroid
    }
    from 'react-native';
    
    var ToolbarAndroid = require('ToolbarAndroid');
    
    var data1 = ["美食", "电影", "酒店", "KTV", "外卖", "优惠买单", "周边游", "火车票", "今日新单", "丽人"];
    var data2 = ["休闲娱乐", "购物", "生活服务", "旅游", "汽车服务", "男装", "女装", "母婴亲子", "境外游", "全部分类"];
    
    class ViewPagerAndroidDemo extends Component {
    
        constructor() {
            super();
            this.state = {
                page: 1
            }
            this.onPageSelected = this.onPageSelected.bind(this)
        }
    
        onPageSelected(e) {
            this.setState({
                page: 1 + e.nativeEvent.position
            })
        }
    
        render() {
            return ( < View style = {
                {
                    flex: 1,
                    flexDirection: 'column',
                }
            } > <ToolbarAndroid title = "仿美团头部滑动分类"style = {
                {
                    height: 56,
                    backgroundColor: '#ffffff'
                }
            } > </ToolbarAndroid>
                    <ViewPagerAndroid
                        style={styles.viewPager}
                        initialPage={0}
                        onPageSelected={this.onPageSelected}
                    >
                        <View style={styles.pageStyle}>
                            <View style={styles.row}>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('./image / ic_category_0.png ')}/>
                                    <Text style={styles.text}>{data1[0]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_1.png ')}/>
                                    <Text style={styles.text}>{data1[1]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_2.png ')}/>
                                    <Text style={styles.text}>{data1[2]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_3.png ')}/>
                                    <Text style={styles.text}>{data1[3]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_21.png ')}/>
                                    <Text style={styles.text}>{data1[4]}</Text>
                                </View>
                            </View>
                            <View style={styles.row}>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_5.png ')}/>
                                    <Text style={styles.text}>{data1[5]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_6.png ')}/>
                                    <Text style={styles.text}>{data1[6]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_22.png ')}/>
                                    <Text style={styles.text}>{data1[7]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_4.png ')}/>
                                    <Text style={styles.text}>{data1[8]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_11.png ')}/>
                                    <Text style={styles.text}>{data1[9]}</Text>
                                </View>
                            </View>
                        </View>
                        <View style={styles.pageStyle}>
                            <View style={styles.row}>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_10.png ')}/>
                                    <Text style={styles.text}>{data2[0]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_14.png ')}/>
                                    <Text style={styles.text}>{data2[1]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_9.png ')}/>
                                    <Text style={styles.text}>{data2[2]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_13.png ')}/>
                                    <Text style={styles.text}>{data2[3]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_7.png ')}/>
                                    <Text style={styles.text}>{data2[4]}</Text>
                                </View>
                            </View>
                            <View style={styles.row}>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_18.png ')}/>
                                    <Text style={styles.text}>{data2[5]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_19.png ')}/>
                                    <Text style={styles.text}>{data2[6]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_17.png ')}/>
                                    <Text style={styles.text}>{data2[7]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_23.png ')}/>
                                    <Text style={styles.text}>{data2[8]}</Text>
                                </View>
                                <View style={styles.view}>
                                    <Image style={styles.image}
                                           source={require('. / image / ic_category_15.png ')}/>
                                    <Text style={styles.text}>{data2[9]}</Text>
                                </View>
                            </View>
                        </View>
                    </ViewPagerAndroid>
                    <Text style={{alignSelf:'center '}}>当前第{this.state.page}页</Text>
                </View>
            );
        }
    }
    
    const styles = StyleSheet.create({
        viewPager: {
            alignItems: 'center ',
            flexDirection: 'column ',
            height:160
        },
        pageStyle: {
            flex: 1,
            flexDirection: 'column ',
        },
        row: {
            flexDirection: 'row ',
            paddingLeft: 6,
            paddingRight: 6,
            paddingTop: 12,
        },
        view: {
            flex: 1,
            flexDirection: 'column ',
        },
        image: {
            alignSelf: 'center ',
            width: 45,
            height: 45
        },
        text: {
            alignSelf: 'center ',
            fontSize: 11,
            color: '#555555 ',
            textAlign: 'center ',
            marginTop: 4,
        },
    });
    
    AppRegistry.registerComponent('ViewPagerAndroidDemo ', () => ViewPagerAndroidDemo);
    '
    

    最后注意:
    最新版的 react-native 为0.19.0,今天升完级重新创建项目之后发现相比较之前的有点不同
    0.19

    class ViewPagerAndroidDemo extends Component {}
    

    之前的

    var ViewPagerAndroidDemo = React.createClass({})
    

    最大的变化时里面方法的书写和声明
    0.19

    constructor() {
        super();
        this.state={page:1}
        this.onPageSelected = this.onPageSelected.bind(this)
    }
    onPageSelected(e){
        this.setState({page:1+e.nativeEvent.position})
    }
    

    以前

    getInitialState: function () {
            return {
               page:0
            };
        },
    onPageSelected: function(e) {  
        this.setState({page:1+e.nativeEvent.position});  
      },
    

    更多的变化请参考:
    1、http://www.newmediacampaigns.com/blog/refactoring-react-components-to-es6-classes
    2、https://facebook.github.io/react/docs/reusable-components.html

    欢迎留言或私信交流,谢谢

    转载请注明转载地址:http://www.jianshu.com/p/6654c0cf30b7
    React Native之旅05-控件ViewPagerAndroid

    相关文章

      网友评论

        本文标题:React Native之旅05-控件ViewPagerAndr

        本文链接:https://www.haomeiwen.com/subject/wdrekttx.html