React Native 样式是否支持渐变?

Does React Native styles support gradients?

我看到有人为此做了这个:https://github.com/brentvatne/react-native-linear-gradient

但是RN本身是否支持它?像

style = StyleSheet.create({
    backgroundGradient: "vertical",
    backgroundGradientTop: "#333333",
    backgroundGradientBottom: "#666666"
});

暂时没有。您应该使用链接的库;他们最近添加了 Android 支持,这是由 react-native 的主要贡献者之一提供的。

寻找类似的解决方案我刚刚看到这个全新的教程,它可以让你桥接一个 Swift 渐变背景 (https://github.com/soffes/GradientView) 库,同时逐步完成每个步骤以获得一个工作的 React 组件.

这是一个循序渐进的教程,允许您通过将 swift 和 objective-c 组件桥接成一个可用的 React Native 组件来构建自己的组件,该组件会覆盖标准的 View 组件并允许您定义如下渐变:

 <LinearGradient 
   style={styles.gradient} 
   locations={[0, 1.0]} 
   colors={['#5ED2A0', '#339CB1']}
 />

您可以在这里找到教程:http://browniefed.com/blog/2015/11/28/react-native-how-to-bridge-a-swift-view/

这里是两个平台 iOS 和 Android 的渐变的不错选择:

https://github.com/react-native-community/react-native-linear-gradient

还有其他方法,例如 expo,但是 react-native-linear-gradient 对我来说效果更好。

<LinearGradient colors={['#4c669f', '#3b5998', '#192f6a']} style={styles.linearGradient}>
  <Text style={styles.buttonText}>
    Sign in with Facebook
  </Text>
</LinearGradient>

// Later on in your styles..
var styles = StyleSheet.create({
  linearGradient: {
    flex: 1,
    paddingLeft: 15,
    paddingRight: 15,
    borderRadius: 5
  },
  buttonText: {
    fontSize: 18,
    fontFamily: 'Gill Sans',
    textAlign: 'center',
    margin: 10,
    color: '#ffffff',
    backgroundColor: 'transparent',
  },
});

首先,运行 npm install expo-linear-gradient --save

您不需要使用动画标签,但这是我在代码中使用的。

里面colors={[ put your gradient colors ]}

那么你可以使用这样的东西:

 import { LinearGradient } from "expo-linear-gradient";
 import { Animated } from "react-native";

 <AnimatedLinearGradient
    colors={["rgba(255,255,255, 0)", "rgba(255,255,255, 1)"]}
    style={{ your styles go here }}/>

const AnimatedLinearGradient = Animated.createAnimatedComponent(LinearGradient);

这是一个生产就绪的纯 JavaScript 解决方案:

<View styles={{backgroundColor: `the main color you want`}}>
    <Image source={`A white to transparent gradient png`}>
</View>

以下是使用此解决方案的 npm 包的源代码: https://github.com/flyskywhy/react-native-smooth-slider/blob/0f18a8bf02e2d436503b9a8ba241440247ef1c44/src/Slider.js#L329

这是使用这个 npm 包的饱和度和亮度的渐变调色板屏幕截图: https://github.com/flyskywhy/react-native-slider-color-picker

React Native 还没有提供渐变色。但是,您仍然可以使用名为 react-native-linear-gradient 的 NPM 包来完成它,或者您可以 click here for more info

  1. npm install react-native-linear-gradient --save

  2. 在您的申请文件中使用 import LinearGradient from 'react-native-linear-gradient';

  3. <pre> <code><LinearGradient colors={['#4c669f', '#3b5998', '#192f6a']}> <Text> Your Text Here </Text> </LinearGradient>

只需将渐变导出为 SVG 并使用 react-native-svg 并在导入组件后设置宽度和高度并 preserveAspectRatio="xMinYMin slice" 缩放满足您需求的 SVG 渐变。

EXPO?嗯,在React Native using EXPO中使用这个方法Linear Gradient(2021 年 11 月更新)

没有 Pod 安装,没有错误,没有额外的链接文件。

expo install expo-linear-gradient

然后

import { LinearGradient } from 'expo-linear-gradient';

<View style={styles.container}>
      <LinearGradient
        // Background Linear Gradient
        colors={['rgba(0,0,0,0.8)', 'transparent']}
        style={styles.background}
      />
      <LinearGradient
        // Button Linear Gradient
        colors={['#4c669f', '#3b5998', '#192f6a']}
        style={styles.button}>
        <Text style={styles.text}>Sign in with Facebook</Text>
      </LinearGradient>
    </View>

完整 Link 此处:https://docs.expo.dev/versions/latest/sdk/linear-gradient/

是 React Native 支持渐变 使用 react-native-linear-gradient 库。