自定義SegmentView控件

先上效果圖


gif5新文件.gif

可以通過屬性修改選中顏色、默認(rèn)顏色和默認(rèn)選擇項(xiàng),以及控制底部標(biāo)示的顯示與否和動(dòng)畫時(shí)間涕刚。

代碼

import React,{Component} from 'react';
import {View,Text,StyleSheet,Dimensions,TouchableHighlight,Animated,Easing} from 'react-native';
import PropsTypes from 'prop-types';
const {width,height} = Dimensions.get('window');
export default class SegmentView extends Component{

    //定義屬性的類型
    static propTypes = {
        titles: PropsTypes.array,
        selectedIndex:PropsTypes.number,
        defaultColor:PropsTypes.string,
        selectColor:PropsTypes.string,
        showSign:PropsTypes.bool,
        callBack:PropsTypes.func,
        animationDuring:PropsTypes.number,
    }
    //定義屬性的默認(rèn)值
    static defaultProps = {
        selectedIndex:0,
        defaultColor:'#333',
        selectColor:'#FE9540',
        showSign:true,
        animationDuring:100,
    }

    constructor(props){
        super(props);

        this.state = {
            selectedIndex:props.selectedIndex,
            signViewLeft:new Animated.Value(props.selectedIndex*width/props.titles.length),
        }
    }


    _renderSignView(){
        if (this.props.showSign) {
            return <Animated.View style={[{left:this.state.signViewLeft,width:width/this.props.titles.length,backgroundColor:this.props.selectColor},styles.signView]}></Animated.View>
        }
    }

    render() {
        return(
            <View style = {styles.container}>
                {this.props.titles.map((item,i)=>{
                    return (
                        <TouchableHighlight 
                        key = {i}
                        style={styles.itemView}
                        underlayColor='#fff'
                        onPress={this._onpressItem.bind(this,i)}
                        >
                            <Text style={{color:i==this.state.selectedIndex?this.props.selectColor:this.props.defaultColor,fontSize:16}}>{item}</Text>
                        </TouchableHighlight>  
                    );
                })}
                {this._renderSignView()}
            </View>
        )
    }
    _onpressItem(i){
        this.setSelectIndex(i);
        if (this.props.callBack) {
            this.props.callBack(i);
        }
    }

    //外部調(diào)用這個(gè)方法可以修改選中項(xiàng)
    setSelectIndex(index){
        if (index==this.state.selectedIndex) {
            return;
        }
        this.setState({
            selectedIndex:index,
        },()=>{
            if (this.props.showSign) {
                Animated.timing(
                    this.state.signViewLeft,
                    {
                        toValue:this.state.selectedIndex*width/this.props.titles.length,
                        duration: this.props.animationDuring,
                        easing: Easing.linear,
                    }
                ).start();
            }
        });
    }

}


const styles = StyleSheet.create({
    container:{
        height:50,
        width:'100%',
        backgroundColor:'#fff',
        flexDirection:'row',
        alignItems:'center',
    },
    itemView:{
        height:'100%',
        flex: 1,
        justifyContent:'center',
        alignItems:'center',
    },
    signView:{
        height:1,
        position:'absolute',
        bottom:0,
    }
});

用法

<SegmentView 
                titles={['1','2','3']}
                selectedIndex = {2}
                showSign={true}
                callBack={(i)=>{
                    console.warn(i);
                }}
                ref={r=>{this.segment=r}}
                ></SegmentView>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子韵丑,更是在濱河造成了極大的恐慌,老刑警劉巖虚缎,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撵彻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡实牡,警方通過查閱死者的電腦和手機(jī)陌僵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來创坞,“玉大人碗短,你說我怎么就攤上這事√庹牵” “怎么了偎谁?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長纲堵。 經(jīng)常有香客問我巡雨,道長,這世上最難降的妖魔是什么席函? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任铐望,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘正蛙。我一直安慰自己督弓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布乒验。 她就那樣靜靜地躺著愚隧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徊件。 梳的紋絲不亂的頭發(fā)上奸攻,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音虱痕,去河邊找鬼睹耐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛部翘,可吹牛的內(nèi)容都是我干的硝训。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼新思,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼窖梁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夹囚,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤纵刘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后荸哟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體假哎,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年鞍历,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了舵抹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劣砍,死狀恐怖惧蛹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刑枝,我是刑警寧澤香嗓,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站装畅,受9級(jí)特大地震影響靠娱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜洁灵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一饱岸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徽千,春花似錦苫费、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牍汹,卻和暖如春铐维,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慎菲。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工嫁蛇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人露该。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓睬棚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親解幼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抑党,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 1、窗體 1撵摆、常用屬性 (1)Name屬性:用來獲取或設(shè)置窗體的名稱底靠,在應(yīng)用程序中可通過Name屬性來引用窗體。 ...
    Moment__格調(diào)閱讀 4,548評(píng)論 0 11
  • 概述 在網(wǎng)易云課堂學(xué)習(xí)李南江老師的《從零玩轉(zhuǎn)HTML5前端+跨平臺(tái)開發(fā)》時(shí)特铝,所整理的筆記暑中。筆記內(nèi)容為根據(jù)個(gè)人需求所...
    墨荀閱讀 2,336評(píng)論 0 7
  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 3,860評(píng)論 1 22
  • 本文是基于最新的react-navigation^2.9.1來書寫的。 要感謝掛著鈴鐺的兔看到一篇不錯(cuò)的介紹,這里...
    HT_Jonson閱讀 895評(píng)論 0 52
  • 每個(gè)家長都希望孩子和自己親近。 可有時(shí)候孩子寧愿和小伙伴談心牵素,也不愿意跟家長交流严衬;有些話愿意跟奶奶說,卻不愿意告訴...
    Carrie萌育兒閱讀 335評(píng)論 0 2