React Native之陰影效果

前言

陰影效果在App中是一個(gè)很常見的需求,在css3中可有直接通過box-shadow屬性實(shí)現(xiàn)扯饶,RN中的iOS端也可以通過下面類似的代碼實(shí)現(xiàn)

    //只支持iOS端
    shadowColor: '#999',  //設(shè)置陰影色
    shadowOffset:{width:0,height:0},  //設(shè)置陰影偏移,該值會(huì)設(shè)置整個(gè)陰影的偏移曾我,width可以看做x,height可以看做y,x向右為正,y向下為正
    shadowOpacity: 1,
    shadowRadius: 1.5,  //設(shè)置陰影模糊半徑,該值設(shè)置整個(gè)陰影的半徑,默認(rèn)的效果就是View的四周都有陰影

但是上面的代碼不支持android捧韵,在android端可以通過elevation屬性來實(shí)現(xiàn)

    //該值只在android5.0(包含)以上的機(jī)型才支持
    //無法指定陰影的顏色以及偏移叙淌,只能設(shè)置陰影的高度
    //陰影效果主要在底部秤掌,其它三面也有一個(gè)層次感,跟ios四面陰影效果不一樣
    elevation:1.5,

但是兩者在表現(xiàn)樣式上,很大不同鹰霍,如果不介意的話闻鉴,可以直接合并兩個(gè)平臺(tái)的屬性,在需要使用的地方引用即可:

 viewShadow:{
      //該屬性只支持>=android 5.0
      elevation:1.5,
      shadowColor:gColors.color999,
      shadowOffset:{width:0,height:0},
      shadowOpacity: 1,
      shadowRadius: 1.5,
}


<View style={[{},Styles.viewShadow]}>

</View>

效果:(兩端差別還是很大的)

iOS:

image

android:

image

具體可以查看: https://stackoverflow.com/questions/41320131/how-to-set-shadows-in-react-native-for-android

選庫

該庫是利用svg庫react-native-svg畫出的陰影,所以兩端的效果一致茂洒,用法如下:

const shadowOpt = {
    width:100,
    height:100,
    color:"#000",
    border:2,
    radius:3,
    opacity:0.2,
    x:0,
    y:3,
    style:{marginVertical:5}
}

...

render = () => {
    return (
        <View>
            <Shadow setting={shadowOpt}>
                <View style={{width:100,height:100}}/>
            </Shadow>
        </View>
    )
}

通過上面的代碼可知道孟岛,這個(gè)庫最大的缺陷就是,<span style="color:red;">必須要設(shè)置width和height</span>督勺,width還好說渠羞,但是height對(duì)于自適應(yīng)高度的布局就很麻煩了,必須設(shè)置固定高度智哀,我只是想加個(gè)陰影次询,還讓我算高度


image

該庫iOS就是利用RN自帶的shadow屬性,android端使用了support庫中的CardView組件瓷叫,所以android端需要集成原生代碼,用法如下:

import CardView from 'react-native-cardview'
<CardView
          cardElevation={2}
          cardMaxElevation={2}
          cornerRadius={5}>
          <Text>
              Elevation 0
          </Text>
</CardView>

<span style="color:red;">注意:</span>

  • 1.最好將CardView設(shè)置一個(gè)背景值屯吊,否則將報(bào)很多下面的警告
YellowBox.js:71 (ADVICE) View #257 of type RCTView has a shadow set but cannot calculate shadow efficiently. Consider setting a background color to fix this, or apply the shadow to a more specific component.
  • 2.如果需要圓角,設(shè)置cornerRadius即可摹菠,不用設(shè)置子元素的borderRaduis



不用管width和height盒卸,完美,讓我們看下的運(yùn)行效果:

iOS:

image

android:

image

嗯次氨,還是有點(diǎn)不一樣蔽介,不過比使用屬性的方式好點(diǎn)了

結(jié)論

|名稱|原生依賴庫|優(yōu)點(diǎn)|缺點(diǎn)|
|--|--|--|--|--|
|RN自帶屬性|否|不用集成任何原生庫|1.兩端差別較大
2.不支持設(shè)置顏色
3.android端只支持elevation一個(gè)屬性|
|react-native-shadow|依賴react-native-svg|1.兩端效果幾乎一樣
2.支持顏色等諸多屬性|1.必須設(shè)置width和height|
|react-native-cardview|該庫android端是原生|1.相比方法一支持的屬性較多|1.兩端還是有差別(比方法1好點(diǎn))
|



  • 1.如果不需要兩端效果完全一樣,且不需要支持android5之前的安卓設(shè)備(很少了現(xiàn)在),可以直接使用RN自帶的屬性

  • 2.如果需要兩端效果完全一樣或者需要設(shè)置陰影的顏色煮寡,則只能使用react-native-shadow,缺點(diǎn)是必須設(shè)置固定的高度和寬度(該庫依賴react-native-svg)

  • 3.那就選擇react-native-cardview,效果比較接近屉佳,且均是iOS/android原生效果。







ps:如果需要react-native-cardview的ts定義文件洲押,可以直接拷貝pull61里面的ts文件武花,該pull雖然已合并,但是還未發(fā)布到npm中(截止2019/12/16)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杈帐,一起剝皮案震驚了整個(gè)濱河市体箕,隨后出現(xiàn)的幾起案子专钉,更是在濱河造成了極大的恐慌,老刑警劉巖累铅,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跃须,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娃兽,警方通過查閱死者的電腦和手機(jī)菇民,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來投储,“玉大人第练,你說我怎么就攤上這事÷贶瘢” “怎么了娇掏?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長勋眯。 經(jīng)常有香客問我婴梧,道長,這世上最難降的妖魔是什么客蹋? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任塞蹭,我火速辦了婚禮,結(jié)果婚禮上讶坯,老公的妹妹穿的比我還像新娘番电。我一直安慰自己,他們只是感情好闽巩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布钧舌。 她就那樣靜靜地躺著担汤,像睡著了一般涎跨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崭歧,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天隅很,我揣著相機(jī)與錄音,去河邊找鬼率碾。 笑死叔营,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的所宰。 我是一名探鬼主播绒尊,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼仔粥!你這毒婦竟也來了婴谱?” 一聲冷哼從身側(cè)響起蟹但,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谭羔,沒想到半個(gè)月后华糖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘟裸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年客叉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片话告。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兼搏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出超棺,到底是詐尸還是另有隱情向族,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布棠绘,位于F島的核電站件相,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏氧苍。R本人自食惡果不足惜夜矗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望让虐。 院中可真熱鬧紊撕,春花似錦、人聲如沸赡突。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惭缰。三九已至浪南,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間漱受,已是汗流浹背络凿。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昂羡,地道東北人絮记。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像虐先,于是被迫代替她去往敵國和親怨愤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 持續(xù)更新中...... 一套企業(yè)級(jí)的 UI 設(shè)計(jì)語言和 React 實(shí)現(xiàn)蛹批。 https://mobile.ant....
    日不落000閱讀 5,691評(píng)論 0 35
  • 寫在前面 在做react-native開發(fā)的時(shí)候撰洗,我們經(jīng)常會(huì)找到一些第三方組件膀息,并且通過npm install的方...
    Quenice閱讀 15,351評(píng)論 21 40
  • React-Native-Elements 一組開發(fā)RN的UI工具包(強(qiáng)烈推薦) ?????????? react-nati...
    以德扶人閱讀 46,124評(píng)論 2 135
  • 一陣撕心裂肺的痛,我的身體被攔腰截?cái)嗔苏浴P杉t的鮮血附和著緩慢的流水鋪展潜支、抽絲、變幻最后消失?并不是你想的那樣柿汛,我的血...
    鷂一閱讀 258評(píng)論 2 4
  • 會(huì)計(jì)是個(gè)相對(duì)來說枯燥乏味的職業(yè)络断,大大小小的憑據(jù)需要整理登記裁替。剛開始那幾年幾乎天天加班,不過...
    亦若顏閱讀 533評(píng)論 0 0