React Native从零开始(九)ViewPagerAndroid的使用,和简单框架搭建

React Native从零开始(九)ViewPagerAndroid的使用,和简单框架搭建






先上一下效果图,在最后会给出源码

一、ViewPagerAndroid的基本使用

做过Android开发的程序猿对于ViewPager应该都很熟悉,使用起来也是得心应手的。但是React Native的ViewPagerAndroid相对于Android来说更加的简单。跟其他的组件一样声明然后使用即可。
下面代码中的每一个View就是ViewPager的每个页,注意,他的子视图必须是View,也就是说他是根据View来判断你有多少个页面。

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>
  );
}

你可以给每个子视图设置样式属性譬如paddingbackgroundColor

他跟Android的ViewPager基本相同,连监听的函数都类似,大家可以看下文档上面写的很清楚。


二、利用ViewPagerAndroid搭建框架

1、首先我们需要将这个页面分成3部分,分别为头部、ViewPagerAndroid和底部,利用RN的flex比例来将其划分出来

结构就如同这个View一样,最上面的子View是头部、然后是Pager再是底部。我们在底部加上点击按钮TouchableOpacity,然后搭建布局即可。

2、创建3个页面
class FirstPage extends Component{
    render(){
        return(
            <View>
                <Text>首页</Text>
            </View>
        );
    }
}
class SecondPage extends Component{
    render(){
        return(
            <View style={[{backgroundColor:"green"}]}>
                <Text>发现</Text>
            </View>
        );
    }
}
class ThirdPage extends Component{
    render(){
        return(
            <View style={[{backgroundColor:"yellow"}]}>
                <Text>我的</Text>
            </View>
        );
    }
}


3、将页面放入ViewPager中并加上点击事件

  <ViewPagerAndroid
                style={styles.body}
                ref={viewPager => { this.viewPager = viewPager; }}
                keyboardDismissMode={"on-drag"}
                onPageSelected={(event) => {
                    let text = "呵呵";
                    if(event.nativeEvent.position==0){
                        text = "首页"
                    }else if(event.nativeEvent.position==1){
                        text = "发现"
                    }else{
                        text = "我的"
                    }
                    this.setState({
                        page:text
                    });
                }}
            >

其中我们利用onPageSelected来获取当前的页面来更改标题的文字、ref函数来使得外部的函数能够调用这个viewpager。



三、献上渣渣源码

在这里利用了state来控制他的文字和图片的显示,还有背景色的变化,也可以将TouchableOpacity换成button也行、反正你开心就好

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  ViewPagerAndroid,
  TouchableOpacity,
    Image
} from 'react-native';
function btn1() {
    this.viewPager.setPage(0);
    this.touch.setBackgroundColor = "white";
    this.setState({
        page:"首页",
        color1:"blue",
        color2:"#33cdee",
        color3:"#33cdee",
        imageUrl1: require("./Images/activity_check.png"),
        imageUrl2: require("./Images/order_normal.png"),
        imageUrl3: require("./Images/ticket_normal.png"),
        textColor1:"red",
        textColor2:"black",
        textColor3:"black"
    })

}
function btn2() {
    this.viewPager.setPage(1);
    this.touch.setBackgroundColor = "white";
    this.setState({
        page:"发现",
        color1:"#33cdee",
        color2:"blue",
        color3:"#33cdee",
        imageUrl1: require("./Images/activity_normal.png"),
        imageUrl2: require("./Images/order_check.png"),
        imageUrl3: require("./Images/ticket_normal.png"),
        textColor1:"black",
        textColor2:"red",
        textColor3:"black"
    })
}
function btn3() {
    this.viewPager.setPage(2);
    this.setState({
        page:"我的",
        color1:"#33cdee",
        color2:"#33cdee",
        color3:"blue",
        imageUrl1: require("./Images/activity_normal.png"),
        imageUrl2: require("./Images/order_normal.png"),
        imageUrl3: require("./Images/ticket_check.png"),
        textColor1:"black",
        textColor2:"black",
        textColor3:"red"
    })
}
class FirstPage extends Component{
    render(){
        return(
            <View>
                <Text>首页</Text>
            </View>
        );
    }
}
class SecondPage extends Component{
    render(){
        return(
            <View style={[{backgroundColor:"green"}]}>
                <Text>发现</Text>
            </View>
        );
    }
}
class ThirdPage extends Component{
    render(){
        return(
            <View style={[{backgroundColor:"yellow"}]}>
                <Text>我的</Text>
            </View>
        );
    }
}
export default class ViewPagerDemo extends Component {
    constructor(props){
        super(props)
        this.state = {
            page: "首页",
            color1: "blue",
            color2: "#33cdee",
            color3: "#33cdee",
            imageUrl1: require("./Images/activity_check.png"),
            imageUrl2: require("./Images/order_normal.png"),
            imageUrl3: require("./Images/ticket_normal.png"),
            textColor1:"red",
            textColor2:"black",
            textColor3:"black"
        };
    }
  render() {
    return (
        <View style={styles.container}>
            <View style={styles.title}>
                <Text style={styles.titleText}>{this.state.page}</Text>
            </View>
            <ViewPagerAndroid
                style={styles.body}
                ref={viewPager => { this.viewPager = viewPager; }}
                keyboardDismissMode={"on-drag"}
                onPageSelected={(event) => {
                    let text = "呵呵";
                    if(event.nativeEvent.position==0){
                        text = "首页"
                    }else if(event.nativeEvent.position==1){
                        text = "发现"
                    }else{
                        text = "我的"
                    }
                    this.setState({
                        page:text
                    });
                }}
            >
                <FirstPage/>
                <SecondPage/>
                <ThirdPage/>
            </ViewPagerAndroid>
            <View style={styles.foot}>
                <TouchableOpacity style={[styles.btnFlex,{backgroundColor:this.state.color1}]} onPress={btn1.bind(this)}  ref={touch => { this.touch = touch; }}>
                    <Image style={styles.imageStyle} source={this.state.imageUrl1} resizeMethod={"resize"}/>
                    <Text style={[styles.btnText,{color:this.state.textColor1}]}>首页</Text>
                </TouchableOpacity>
                <TouchableOpacity  style={[styles.btnFlex,{backgroundColor:this.state.color2}]} onPress={btn2.bind(this)} ref={touch => { this.touch = touch; }}>
                    <Image style={styles.imageStyle} source={this.state.imageUrl2} resizeMethod={"resize"}/>
                    <Text style={[styles.btnText,{color:this.state.textColor2}]}>发现</Text>
                </TouchableOpacity>
                <TouchableOpacity  style={[styles.btnFlex,{backgroundColor:this.state.color3}]} onPress={btn3.bind(this)} ref={touch => { this.touch = touch; }}>
                    <Image style={styles.imageStyle} source={this.state.imageUrl3} resizeMethod={"resize"}/>
                    <Text style={[styles.btnText,{color:this.state.textColor3}]}>我的</Text>
                </TouchableOpacity>
            </View>
        </View>
    );
  }
}

const styles = StyleSheet.create({
    container:{
        flex:1,
        flexDirection:"column"
    },
    title:{
        flex:1,
        justifyContent:"center",
        alignItems:"center",
        backgroundColor:"#33cdee"
    },
    titleText:{
        fontSize:20,
        fontWeight:"bold",
        color:"white"
    },
    body:{
        flex:8
    },
    foot:{
        flex:1,
        flexDirection:"row"
    },
    btnFlex:{
        flex:1,
        justifyContent:"center",
        alignItems:"center",
        padding:5
    },
    btnText:{
        flex:1,
        fontSize:12,
        fontWeight:"bold",
        marginTop:5
    },
    imageStyle:{
        flex:1,
        resizeMode:'contain'
    }

});

AppRegistry.registerComponent('ViewPagerDemo', () => ViewPagerDemo);







大家可以加好友交流学习
QQ:1115856293
微信:






















  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要从零搭建React Native框架,你需要按照以下步骤进行操作: 1. 首先,确保你的开发环境已经安装了Node.js和npm。你可以在官方网站上下载并安装它们。 2. 打开终端或命令提示符,使用npm全局安装React Native命令行工具。运行以下命令: ``` npm install -g react-native-cli ``` 3. 创建一个新的React Native项目。在终端中,进入你想要创建项目的目录,并运行以下命令: ``` react-native init MyProject ``` 4. 进入项目目录: ``` cd MyProject ``` 5. 接下来,你需要根据你的操作系统和平台进行一些设置。 - 对于Android平台: - 确保你已经安装了Java Development Kit (JDK)。你可以从Oracle官方网站下载并安装它。 - 确保你已经安装了Android开发工具包 (Android SDK)。你可以从Android官方网站下载并安装它。 - 设置ANDROID_HOME环境变量,指向你的Android SDK的安装路径。 - 在项目的android目录下,创建一个名为local.properties的文件,并将以下内容添加到文件中: ``` sdk.dir = /path/to/your/Android/sdk ``` 将"/path/to/your/Android/sdk"替换为你的Android SDK的实际路径。 - 对于iOS平台: - 确保你已经安装了Xcode,它是开发iOS应用的官方工具。 - 在项目的ios目录下,运行以下命令来安装项目的依赖: ``` pod install ``` 6. 现在,你可以开始编写React Native代码了。在项目的app目录下,你可以编写React Native的JavaScript代码,描述应用的外观和行为。 7. 如果你需要编写Android原生代码,可以在项目的android目录下进行。同样地,如果你需要编写iOS原生代码,可以在项目的ios目录下进行。 8. 最后,你需要将React Native的JavaScript代码打包并生成相应的资源文件。在终端中,运行以下命令: ``` npx react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res ``` 这将生成一个名为index.android.bundle的文件,以及一些资源文件,用于在Android应用中加载React Native代码。 这样,你就成功地从零搭建了一个React Native框架。你可以根据需要继续开发和定制你的应用。 #### 引用[.reference_title] - *1* [React Native开发环境搭建详细步骤](https://blog.csdn.net/Asafoetida/article/details/123042482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [混合框架ReactNative之 环境搭建](https://blog.csdn.net/qq_29848853/article/details/129839220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值