react-native FlatList實(shí)現(xiàn)GridView效果

做Android的人都知道,Android有一種控件叫GridView熊锭,可以用來展示圖片幌衣,類似于9宮格效果,而在react native中郎逃,我們要用FlatList實(shí)現(xiàn)這種效果~

sybil052-20180926-151732.png
FlatList屬性
屬性 作用
horizontal true 則變?yōu)樗讲季帜J?/td>
columnWrapperStyle 如果設(shè)置了多列布局哥童,則可以額外指定此樣式作用在每行容器上
numColumns 多列布局,此時組件內(nèi)元素會從左到右從上到下按 Z 字形排列褒翰,類似啟用了flexWrap的布局贮懈,但只能在非水平模式下使用
實(shí)現(xiàn)思路
sybil052-20180926-153034@2x.png

如圖匀泊,每行顯示3個圖片,總共有4個間隔朵你,間隔距離我們給固定值各聘,以此類推,如果顯示cols個圖片抡医,間隔數(shù)為cols+1躲因,我們需要據(jù)此計(jì)算圖片寬度。
假設(shè):列數(shù)cols = 3忌傻,左右邊距l(xiāng)eft = 10, 上下間距top = 10,那么圖片寬度ImageWH = (screenW - (cols + 1) * left) / cols大脉,圖片高度ImageH = ImageWH * 0.8

具體代碼
import React, {PureComponent} from 'react';
import {connect} from 'react-redux';
import {
    View,
    StyleSheet,
    FlatList,
    Dimensions,
    TouchableOpacity,
    Image
} from 'react-native'
import Text from '../../components/common/scalingText';
import * as Color from '../../constants/colors';
import NavigationBar from '../../components/navigationBar/navigationBar';

const screenW = Dimensions.get('window').width;

// 一些常量設(shè)置
const cols = 3; // 列數(shù)
const left = 10; // 左右邊距
const top = 10; // 上下邊距
const ImageWH = (screenW - (cols + 1) * left) / cols; // 圖片大小

class UploadInfo extends PureComponent {
    constructor(props) {
      super(props);
      const params = this.props.navigation.state.params;
      this.state={
        title: params.title,
        data:[
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850063217&di=1c4962aad6a64fd2f4a381de8d05d595&imgtype=0&src=http%3A%2F%2Fimg15.3lian.com%2F2015%2Ff2%2F8%2Fd%2F96.jpg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850063216&di=0f4f9bbaaee6bafe24fab3e5f472c481&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fblog%2F201512%2F12%2F20151212120309_BduTC.jpeg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850063214&di=f73de557becc9667bb105fdfecd39426&imgtype=0&src=http%3A%2F%2Fimgq.duitang.com%2Fuploads%2Fitem%2F201503%2F22%2F20150322171820_UtwMk.thumb.700_0.jpeg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850063212&di=8db8ff9787b8bd7224908126d5419e41&imgtype=0&src=http%3A%2F%2Fwww.qqwangming.org%2Fuploads%2F71f459727f5055a0%2F8.jpg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850063210&di=b936ead7972601ea0c12e8648a8f1df0&imgtype=0&src=http%3A%2F%2Fpic31.photophoto.cn%2F20140403%2F0020033029624335_b.jpg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850155795&di=72f9878782ad4b80ea320111effe0b71&imgtype=0&src=http%3A%2F%2Fpic27.photophoto.cn%2F20130420%2F0005018421916914_b.jpg'},
            {uri:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1537850155794&di=4efaecca3f367346ff49c42f8f89d9f2&imgtype=0&src=http%3A%2F%2Fimg3.duitang.com%2Fuploads%2Fitem%2F201206%2F26%2F20120626190359_MjB3s.thumb.700_0.jpeg'}
        ]
      }
      this.renderRow = this.renderRow.bind(this);
    }
    componentDidMount() {

    }
    
    // 返回cell
    renderRow(rowData){
        console.log('rowData',rowData)
        return(
            <TouchableOpacity 
                activeOpacity={0.8} 
                onPress={()=>{
                    this.props.navigation.push('ImageViewer',{
                        hideDelete: true,
                        image: this.state.data,
                        num: rowData.index,
                    });
                }} 
            >
                <View style={styles.innerViewStyle}>
                    <Image source={{uri:rowData.item.uri}} style={styles.iconStyle} />
                </View>
            </TouchableOpacity>
        );
    }

    _keyExtractor = (item, index) => {
        return item.uri + index
    }

    render() {
        return (
            <View style={styles.container}>
                <NavigationBar
                    title={this.state.title}
                    hiddenBackIcon={false}
                    router={this.props.navigation}
                />
                <FlatList
                    style={{backgroundColor: Color.WHITE_FFFFFF}}
                    renderItem={this.renderRow}
                    data={this.state.data}
                    keyExtractor={this._keyExtractor}
                    numColumns={cols}
                    columnWrapperStyle={styles.columnStyle}
                    horizontal={false}
                />
            </View>
        );
    }
}

const styles =StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: Color.GRAY_F0F2F5
    },
    columnStyle:{
        // marginLeft: 10,
        // marginRight: 10
    },
    innerViewStyle:{
        width: ImageWH,
        height: ImageWH * 0.8,
        marginLeft: left,
        marginTop: top,
        // 文字內(nèi)容居中對齊
        alignItems:'center'
    },
    iconStyle:{
        width: ImageWH,
        height: ImageWH * 0.8,
    },
});

function mapStateToProps(state){
    return {};
}

function mapDispatchToProps (dispatch){
    return {};
}

export default connect(mapStateToProps, mapDispatchToProps)(UploadInfo);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市水孩,隨后出現(xiàn)的幾起案子镰矿,更是在濱河造成了極大的恐慌,老刑警劉巖荷愕,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡怀,死亡現(xiàn)場離奇詭異,居然都是意外死亡安疗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門够委,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荐类,“玉大人,你說我怎么就攤上這事茁帽∮窆蓿” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵潘拨,是天一觀的道長吊输。 經(jīng)常有香客問我,道長铁追,這世上最難降的妖魔是什么季蚂? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮琅束,結(jié)果婚禮上扭屁,老公的妹妹穿的比我還像新娘。我一直安慰自己涩禀,他們只是感情好料滥,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艾船,像睡著了一般葵腹。 火紅的嫁衣襯著肌膚如雪高每。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天践宴,我揣著相機(jī)與錄音觉义,去河邊找鬼。 笑死浴井,一個胖子當(dāng)著我的面吹牛晒骇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播磺浙,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼洪囤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撕氧?” 一聲冷哼從身側(cè)響起瘤缩,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎伦泥,沒想到半個月后剥啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡不脯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年府怯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片防楷。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡牺丙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出复局,到底是詐尸還是另有隱情冲簿,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布亿昏,位于F島的核電站峦剔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏角钩。R本人自食惡果不足惜吝沫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彤断。 院中可真熱鬧野舶,春花似錦、人聲如沸宰衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽供炼。三九已至一屋,卻和暖如春窘疮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冀墨。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工闸衫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诽嘉。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓蔚出,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虫腋。 傳聞我的和親對象是個殘疾皇子骄酗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內(nèi)容