1. 程式人生 > >React Native之如何在Android上新增陰影

React Native之如何在Android上新增陰影

官網中明確表示在react native中陰影的樣式屬性shadow...都是隻支援iOS的,並不支援Android。


目前有個方法,可以讓Android有灰色的陰影,但是無法指定Android機上的陰影色值,只能是灰色的預設。

elevation:4   這個屬性中的4是代表陰影的高度。且這個屬性新增後,不會影響iOS機上的原本的彩色的陰影顏色,只是在Android機上顯示的是預設的灰色的陰影。

btnView:{
        width:170,
        alignItems:'center',
        borderRadius:20,
        height:35,
        justifyContent:'center',
        backgroundColor: Color.CMHeaderBgColor,
        
        //以下是陰影屬性:
        shadowOffset: {width: 0, height: 5},
        shadowOpacity: 0.5,
        shadowRadius: 5,
        shadowColor: Color.CMHeaderBgColor,
        //注意:這一句是可以讓安卓擁有灰色陰影
        //elevation: 4,
        zIndex: Global.isIOS() ? 1 : 0
}
==============================================================================================

2018.5.2更新:有兩種方式,解決安卓可以實現彩色陰影的問題:

方法一:使用react-native-shadow和react-native-svg實現:

1. npm install react-native-shadow

2. npm install [email protected]

備註:react-native-svg選擇什麼版本安裝,需要根據你專案的react版本和react-native版本;圖解如下:


3. react-native link react-native-svg

4.開始寫樣式,適合安卓和iOS的陰影,支援透明度,長度,色值的配置:

import React, {Component} from 'react'
import {
    StyleSheet,
    View,
    Text,
    ScrollView,
    Image,
    TouchableOpacity
} from 'react-native'
 
import {BoxShadow} from 'react-native-shadow'
 
export default class VideoCell extends Component {
    render = () => {
        const shadowOpt = {
            width:160,
            height:170,
            color:"#000",
            border:2,
            radius:3,
            opacity:0.2,
            x:0,
            y:3,
            style:{marginVertical:5}
        }
 
        return (
            <BoxShadow setting={shadowOpt}>
                <TouchableOpacity style={{
                    position:"relative",
                    width: 160,
                    height: 170,
                    backgroundColor: "#fff",
                    borderRadius:3,
                    // marginVertical:5,
                    overflow:"hidden"}}>
                    測試
                </TouchableOpacity>
            </BoxShadow>
        )
    }
}

事實證明這種方法可以實現我們想要的效果。但是這會牽扯到你的專案不能僅僅通過熱更新來迭代版本;需要發app store大版本和安卓市場版本。

如有不解,可移步檢視react-native-shadow官網:

方法二:

我們可以使用陰影圖作為背景圖,附著上去的方法:

<Image source={require('../../content/img/bank/shadowBg.png')}
   style={{width: deviceWidth-20, height: 220, alignItems: 'center',resizeMode:Image.resizeMode.contain}}> 
  <View style={styles.bankTop}></View>           
</Image>

Image元件,當為單標籤是圖片;當未雙標籤是背景;

如圖:可以看到有屎黃色☺的背景: