React-Native 实现无限轮播

1、配置环境 http://reactnative.cn/docs/0.25/getting-started.html

2、环境配置出现错误,请看这一篇:http://blog.csdn.net/p106786860/article/details/51052299

3、代码下载地址: https://github.com/BrisyIOS/React-Native-UnlimtedCarousel.git

4、需要将资源图片放到工程中。

5、代码展示如下:

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

import React, { Component } from ‘react‘;import {    AppRegistry,    StyleSheet,    Text,    View,    Image,    ScrollView

} from ‘react-native‘;

var Dimensions = require(‘Dimensions‘);var {width} = Dimensions.get(‘window‘);var TimerMixin = require(‘react-timer-mixin‘);

var UnlimtedCarousel = React.createClass({

  // 注册定时器  mixins: [TimerMixin],

  // 设置常量  getDefaultProps() {

    return {      duration: 2000    }  },

  // 初始化变量  getInitialState() {

    return {currentPage: 0}  },

  render() {    return (        <View style={styles.container}>  <ScrollView    ref="scrollView"    horizontal={true}    pagingEnabled={true}    showsHorizontalScrollIndicator={false}    style={styles.scrollViewStyle}    onMomentumScrollEnd={(e)=>this.onAnimationEnd(e)}    onScrollBeginDrag={this.onScrollBeginDrag}    onScrollEndDrag={this.onScrollEndDrag}  >    {this.renderAllImages()}  </ScrollView>    <View style={styles.cycleStyle}>    {this.renderAllCycle()}  </View>    </View>  )  },  // 视图绘制完毕之后会调用此方法  componentDidMount() {    this.startTimer();  },

  // 开启定时器  startTimer() {

    // 拿到scrollView    var scrollView = this.refs.scrollView;    // 添加定时器    this.timer = this.setInterval(function() {

      var tempPage;      if (this.state.currentPage+1 >=7) {        tempPage = 0;      } else {        tempPage = this.state.currentPage+1;      }      // 更新状态机      this.setState( {        currentPage: tempPage      });

      // 改变scrollView的偏移量      let offSet = tempPage * width;      scrollView.scrollTo({x: offSet, y: 0, animated: true});

    }, this.props.duration);  },

  // 当一帧滚动结束的时候会调用此方法  onAnimationEnd(e) {    // 获取偏移量    let offset = e.nativeEvent.contentOffset.x;    // 获取页码    let page = Math.floor(offset / width);    // 更新状态机,重新绘制UI    this.setState({      currentPage: page    });  },

  onScrollBeginDrag() {    // 清除定时器    this.clearInterval(this.timer);  },

  onScrollEndDrag() {    // 重新开启定时器    this.startTimer();  },  // 返回所有图片  renderAllImages() {    var imageItems = [];    var imageNames = [‘萝卜伪饺子.jpg‘, ‘亲子丼.jpg‘, ‘日式肉末茄子.jpg‘, ‘日式烧汁炒牛肉.jpg‘,      ‘日式味噌煎鸡块.jpg‘, ‘日式香菇炖鸡翅.jpg‘, ‘日式炸天妇罗.jpg‘];    var colors = [‘red‘, ‘blue‘, ‘green‘, ‘purple‘, ‘brown‘, ‘black‘, ‘yellow‘];

    for (var i=0; i<7; i++) {      // 将Image装入数组中      imageItems.push(      <Image key={i}      source={{uri: imageNames[i]}}      style={{backgroundColor: colors[i], width: width, height: 300}} />    );    }    // 返回所有Image    return imageItems;  },  // 设置小圆点  renderAllCycle() {    var cycleItems = [];    var colorStyle;    for (var i=0; i<7; i++) {      colorStyle = (i==this.state.currentPage) ? {color: ‘gray‘} : {color: ‘white‘}      cycleItems.push(      <Text key={i} style={[{fontSize: 30, left: 10}, colorStyle]}>&bull;</Text>    )    }    return cycleItems;  }})

// 设置样式const styles = StyleSheet.create({

  container: {    width: width,    height: 300,    backgroundColor: ‘green‘,  },

  scrollViewStyle: {    backgroundColor: ‘yellow‘,    width:width,    marginTop: 20  },

  cycleStyle: {    backgroundColor: ‘rgba(241,241,241,0.5)‘,    width: width,    height: 30,    position: ‘absolute‘,    bottom: 0,    flexDirection: ‘row‘,    alignItems: ‘center‘  }});

AppRegistry.registerComponent(‘UnlimtedCarousel‘, () => UnlimtedCarousel);

这只是展示了iOS的一部分代码,要运行到Android上,可以吧实现轮播的代码写到一个文件中,封装成组件,然后在iOS和Android中调用即可
时间: 2024-10-24 07:21:33

React-Native 实现无限轮播的相关文章

iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView

下载链接:github不断更新地址:https://github.com/gsdios/SDCycleScrollView 使用原理:采用UICollectionView的重用机制和循环滚动的方式实现图片的无限轮播,播放非常顺畅,解决了UISCrollView使用时从最后一张跳到第一张时的生硬状态. 主要类截图: SDCollectionViewCell:用来重用的item,即显示图片的视图: SDCycleScrollView: 对外提供的一个创建轮播器的接口类,使用者就是直接使用这个类来实现

iOS无限轮播视图

以前曾经写过一个用UICollectionView的无限轮播视图,但是写法不是很成熟,设置模型上限为数组的count * 50这样做的话会滚动到最后一个模型的时候会crash掉,今天理了下思路,写了一个基于UISCrollView的轮播视图,虽然比较简陋,但是实现了基本功能.没有怎么加入注释,请谅解效果图如下: 有兴趣的可以去参考一些代码,附上GitHub地址:https://github.com/zimou47/UnlimitedScrollView 如果为您带来了帮助,请点一颗星O(∩_∩)

iOS开发UI篇—无限轮播(循环利用)

一.无限轮播  1.简单说明 在开发中常需要对广告或者是一些图片进行自动的轮播,也就是所谓的无限滚动. 在开发的时候,我们通常的做法是使用一个UIScrollView,在UIScrollView上面添加多个imageView,然后设置imageView的图片,和scrollView的滚动范围. 以前的做法: 一般而言,轮播的广告或者是图片数量都不会太多(3~5张).所以,并不会太多的去考虑性能问题.但是如果图片过多(比如有16张图片,就需要创建16个imageView),那么就不得不考虑性能问题

无限轮播图的制作

url:http://zjingwen.github.io/SetTimeOutGoBlog/webdemo/huanyouji/index.html (如果打开过慢,或者打不开,原因你懂得.) 一.思路 1.所有滑动效果的demo都是通过控制css里的left值,来控制滑动效果的. 2.需要两个块,一个div块,一个ui.div块的position是relative,ui块的position是absolute.这样ui块的left就可以根据外层的div来控制.div的overflow是hidd

iOS开发UI篇—无限轮播(功能完善)

iOS开发UI篇—无限轮播(功能完善) 一.自动滚动 添加并设置一个定时器,每个2.0秒,就跳转到下一条. 获取当前正在展示的位置. 1 [self addNSTimer]; 2 } 3 4 -(void)addNSTimer 5 { 6 // NSTimer timerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repe

新版无限轮播视图,2个imageView完成(不依赖任何三方库)

笔者最新改写的无限轮播视图,完全不依赖任何三方库,2个imageView实现无限轮播. 特点: 1.支持图片缓存到本地,亦支持一键清除缓存. 2.超级轻量,没有任何第三方框架参合,占用内存极小 3.高度自定义,支持修改pageControll的显示图片及显示位置 4.图片展示模式多样性,支持轮播展示与渐入渐出模式展示 5.支持自动滚动 6.创建方式多样,支持代码及storyboard创建 7.支持显示图片简介,具体见GitHub效果图 代码实现: .h // // WYScrollView.h

iOS开发之ImageView复用实现图片无限轮播

在上篇博客中iOS开发之多图片无缝滚动组件封装与使用给出了图片无限轮播的实现方案之一,下面在给出另一种解决方案.今天博客中要说的就是在ScrollView上贴两个ImageView, 把ImageView进行交替切换来实现图片的无限轮播,在轮播时去修改ImageView上的图片.上一篇博客中是有几张图片就实例化几个ImageView, 然后事先把Image贴到相应的ImageView上,这种做法比较简单,而且易于实现. 今天这篇博客就要实现使用两张ImageView, 交替的区展示Image,

无限轮播的实现,未加自动轮播效果(非原创)

最近一直在看视频,学到了一个无限轮播,今天把它给写下来保存,方便日后自己查阅. html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="keywords" content=""> 6 <meta name="description" content="

图片无限轮播由于ViewPager的预加载机制所导致的问题

分类和回归是分析预测中最古老的话题.支持向量机.逻辑回归.朴素贝叶斯算法.神经网络和深度学习都属于分类和回归技术. 本章将重点关注决策树算法和它的扩展随机决策森林算法,这两个算法灵活且应用广泛,即可用于分类问题,也可用于回归问题.更令人兴奋的是,它们可以帮助我们预测未来,至少是预测我们尚不肯定的事情.比如,根据线上行为来预测购买汽车的概率,根据用词预测邮件是否是垃圾邮件,根据地理位置和土壤的化学成分预测哪块耕地的产量可能更高. 总体实现无限轮播的思想,其实和网上大部分的思路都是相同的,设置一个I

ViewPager实现无限轮播踩坑记

最近笔者想通过ViewPager来实现一个广告Banner,并实现无限轮播的效果,但是在这个过程中踩了不少的坑,听我慢慢道来.如果大家有遇到和我一样的情况,可以参考我的解决方法,没有那就更好,如果针对我的解决方法,有啥更好的方案,欢迎和我分享 使用ViewPager实现无限轮播代码 MainActivity代码 public class MainActivity extends AppCompatActivity { private ViewPager mViewPager; private T