热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ReactNative之ScrollView轮播图实现方法实例-

1.index.Android.js  import React, { Component } from react;  import {    AppRegistry,    StyleShee
1.index.Android.js

import React, { Component } from 'react';  
import {  
  AppRegistry,  
  StyleSheet,  
  TextInput,  
  TouchableOpacity,  
  ScrollView,  
  Text,  
  View  
} from 'react-native';  
  
import ScrollViewDemo from "./scrollViewDemo";  
import ScrollViewTop from "./scrollViewTop";  
import PositionDemo from "./positionDemo";  
  
export default class CQQLoginDemo extends Component {  
    
  render() {  
    return (  
      
    );  
  }  
  
}  
AppRegistry.registerComponent('CQQLoginDemo', () => CQQLoginDemo);

2.在项目的 index.android.js同一目录下 创建json文件 这样方便图片的访问,资源图片放在项目名称\android\app\src\main\res\drawable 下面

这里的BadgeData.json 如下:

{  
  "data":[  
    {  
      "icon" : "danjianbao",  
      "title" : "单肩包"  
    },  
    {  
      "icon" : "liantiaobao",  
      "title" : "链条包"  
    },  
    {  
      "icon" : "qianbao",  
      "title" : "钱包"  
    },  
    {  
      "icon" : "shoutibao",  
      "title" : "手提包"  
    },  
    {  
      "icon" : "shuangjianbao",  
      "title" : "双肩包"  
    },  
    {  
      "icon" : "xiekuabao",  
      "title" : "斜挎包"  
    }  
  ]  
}

3.主要的文件 scrollViewTop.js 文件 如下 具体注释中已写 直接上代码:

/** 
 * Sample React Native App 
 *  
 * @flow 
 */  
  
import React, { Component } from 'react';  
import {  
  AppRegistry,  
  StyleSheet,  
  ScrollView,  
  Image,  
  Text,  
  View  
} from 'react-native';  
  
let DimensiOns= require('Dimensions');  
let ScreenWidth = Dimensions.get('window').width;  
let ScreenHeight = Dimensions.get('window').height;  
  
import ImageData from "./BadgeData.json";   
  
export  default class scrollViewTop extends Component {  
    
  constructor(props) {  
    super(props);  
    this.state = { currentPage: 0 };  
  }  
  
  static defaultProps = {  
    duration: 1000,  
  }  
  
  componentDidMount() {  
    this._startTimer();  
  
  }  
  
  componentWillUnmount() {  
    // 如果存在this.timer,则使用clearTimeout清空。  
    // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear      this.timer && clearTimeout(this.timer);  
  }  
  
  render() {  
    return (  
        
        {this._onAnimationEnd(e)}}  
          //开始拖拽            OnScrollBeginDrag={()=>{this._onScrollBeginDrag()}}  
          //结束拖拽            OnScrollEndDrag={()=>{this._onScrollEndDrag()}}  
          >  
          {this._renderAllImage()}  
          
          
         {this._renderAllIndicator()}  
          
        
    );  
  }  
  /**开始拖拽 */  
  _onScrollBeginDrag(){  
    console.log("开始拖拽");  
    //两种清除方式 都是可以的没有区别  
    // this.timer && clearInterval(this.timer);      this.timer && clearTimeout(this.timer);  
  }  
  /**停止拖拽 */  
  _onScrollEndDrag(){  
    console.log("停止拖拽");  
    this.timer &&this._startTimer();  
  }  
  
  /**1.轮播图片展示 */  
  _renderAllImage() {  
    let allImage = [];  
    let imgsArr = ImageData.data;  
    for (let i = 0; i   
      );  
    }  
    return allImage;  
  }  
    
  /**2.手动滑动分页实现 */  
  _onAnimationEnd(e) {  
    //求出偏移量      let offsetX = e.nativeEvent.contentOffset.x;  
    //求出当前页数      let pageIndex = Math.floor(offsetX / ScreenWidth);  
    //更改状态机      this.setState({ currentPage: pageIndex });  
  }  
  
    /**3.页面指针实现 */  
    _renderAllIndicator() {  
    let indicatorArr = [];  
    let style;  
    let imgsArr = ImageData.data;  
    for (let i = 0; i   
         •  
          
      );  
    }  
    return indicatorArr;  
  }  
  
  /**4.通过定时器实现自动播放轮播图 */  
    _startTimer(){  
    let scrollView = this.refs.scrollView;  
    this.timer = setInterval(  
      ()=>{console.log('开启定时器');   
       let imageCount = ImageData.data.length;  
       //4.1 设置圆点         let activePage = 0;  
       //4.2判断         if(this.state.currentPage>=imageCount+1){  
         activePage = 0;  
       }else{  
         activePage = this.state.currentPage+1;  
       }  
       //4.3 更新状态机         this.setState({currentPage:activePage});  
       //4.4 让scrollview 滚动起来         let offsetX = activePage * ScreenWidth;  
       scrollView.scrollResponderScrollTo({x:offsetX,y:0,animated:true});  
      },  
       this.props.duration  
     );  
    }  
}  
  const styles = StyleSheet.create({  
  continer:{  
    backgroundColor: '#dddddd'  
  },  
  imageStyle:{  
    height:400,  
    width:ScreenWidth  
  },  
  pageViewStyle:{  
    height:25,  
    width:ScreenWidth,  
    backgroundColor:'rgba(0,0,0,0.4)',  
    position:'absolute',  
    bottom:0,  
  
    flexDirection:'row',  
    alignItems:'center',  
  }  
});

以上就是React Native 之ScrollView轮播图实现方法实例的详细内容,更多请关注 第一PHP社区 其它相关文章!


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
author-avatar
文民左
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有