如何在本机react中淡化视图的边缘?

IT技术 reactjs react-native
2021-05-14 09:51:37

示例 1

示例 2

如何在 React Native 中淡出像上面的图像一样的视图的边缘?

4个回答

在 iOS 上,您可以使用该MaskedViewIOS组件为淡入淡出效果创建透明的 alpha 蒙版。

对于渐变渐变本身,您可以使用类似react-native-linear-gradient(也内置在 Expo 中)或半透明图像(黑色像素将显示内容,透明像素将阻止蒙版内容)之类的东西。

<MaskedViewIOS 
  maskElement={
    <LinearGradient colors={['black', 'transparent']} />
  }
>
  <YourContent />
</MaskedViewIOS>

这是一个关于 Snack例子

不幸的是,MaskedView 尚未在 Android 上实现。我不知道实现这一点的简单方法,但很高兴被证明是错误的。

我知道这篇文章很旧,但对于现在看这篇文章的任何人,您都可以像这样在 ScrollView 上设置 FadingEdgeLength 以实现该效果。请注意,它仅适用于 Android。例如:

<ScrollView fadingEdgeLength={100}>
  ... scroll view content ...
</ScrollView>

你可以用类似的东西包装你的视图

<BackgroundContainer>
  <LinearGradient>
    <UserList>
  </LinearGradient>
</BackgroundContainer>

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

然后使用 alpha 通道 (rgba()) 来获得您正在寻找的透明效果。

您可以使用:https : //github.com/react-native-community/react-native-masked-view

它支持安卓和iOS。

import React from 'react';
import { Text, View } from 'react-native';
import MaskedView from '@react-native-community/masked-view';

export default class App extends React.Component {
  render() {
    return (
      <MaskedView
        style={{ flex: 1, flexDirection: 'row', height: '100%' }}
        maskElement={
          <View
            style={{
              // Transparent background because mask is based off alpha channel.
              backgroundColor: 'transparent',
              flex: 1,
              justifyContent: 'center',
              alignItems: 'center'
            }}
          >
            <Text
              style={{
                fontSize: 60,
                color: 'black',
                fontWeight: 'bold'
              }}
            >
              Basic Mask
            </Text>
          </View>
        }
      >
        {/* Shows behind the mask, you can put anything here, such as an image */}
        <View style={{ flex: 1, height: '100%', backgroundColor: '#324376' }} />
        <View style={{ flex: 1, height: '100%', backgroundColor: '#F5DD90' }} />
        <View style={{ flex: 1, height: '100%', backgroundColor: '#F76C5E' }} />
        <View style={{ flex: 1, height: '100%', backgroundColor: '#e1e1e1' }} />
      </MaskedView>
    );
  }
}