Transparent overlay in React Native

后端 未结 6 1564
陌清茗
陌清茗 2020-12-23 13:38

I\'m trying to get a transparent overlay sliding down in an app, pretty much like this here (all/filter-by):

\"t

相关标签:
6条回答
  • 2020-12-23 14:05

    Maybe better use ImageBackground-Component.

    import {View, ImageBackground, Text} from 'react-native';
    
    const styles = StyleSheet.create({
    
    });
    ...
    <ImageBackground
      style={styles.image}
      source={{uri: props.picture_url}}
    >
       <View style={styles.textbox}>
          <Text style={styles.title} >CHILD OF IMAGE_BACKGROUND</Text >
        </View>
     </ImageBackground >
    ...
    
    0 讨论(0)
  • 2020-12-23 14:07

    I was having same problem I did it this way.

    import {View,StyleSheet} from "react-native";
    //where you want it to render
     <View style={styles.overlaycontainer}>
          <Text style={{color:"#fff"}}>Locating directions please wait ...</Text>        
     </View> 
    // at the bottom of your in styles
    const styles = StyleSheet.create({
      overlaycontainer:{
        ...StyleSheet.absoluteFillObject,
        backgroundColor: '#000',
        opacity:0.8,
        justifyContent:"center",
        alignItems:"center" 
      }
    });
    
    0 讨论(0)
  • 2020-12-23 14:13

    The key to your ListView not moving down, is to set the positioning of the overlay to absolute. By doing so, you can set the position and the width/height of the view manually and it doesn't follow the flexbox layout anymore. Check out the following short example. The height of the overlay is fixed to 360, but you can easily animate this or make it dynamic.

    'use strict';
    
    var React = require('react-native');
    var Dimensions = require('Dimensions');
    
    // We can use this to make the overlay fill the entire width
    var { width, height } = Dimensions.get('window');
    
    var {
      AppRegistry,
      StyleSheet,
      Text,
      View,
    } = React;
    
    var SampleApp = React.createClass({
      render: function() {
        return (
          <View style={styles.container}>
            <Text style={styles.welcome}>
              Welcome to the React Native Playground!
            </Text>
            <View style={[styles.overlay, { height: 360}]} />
          </View>
        );
      }
    });
    
    var styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
      welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
      },
      // Flex to fill, position absolute, 
      // Fixed left/top, and the width set to the window width
      overlay: {
        flex: 1,
        position: 'absolute',
        left: 0,
        top: 0,
        opacity: 0.5,
        backgroundColor: 'black',
        width: width
      }  
    });
    
    AppRegistry.registerComponent('SampleApp', () => SampleApp);
    
    module.exports = SampleApp;
    
    0 讨论(0)
  • 2020-12-23 14:18

    You can use this example for create overlay.You can change state for visible and invisible for overlay.

    import React, { Component } from "react";
    import { View, Text, StyleSheet } from "react-native";
    
    class Popup extends Component {
      constructor(props) {
        super(props);
        this.state = {
          isPopupTrue: true
        };
      }
    
      render() {
        return (
          <View style={styles.container}>
          { this.state.isPopupTrue &&
            (<View style={styles.overlay}>
              <View style={styles.popup}>
                <Text style={styles.text}> Overlay </Text>
              </View>
            </View>)
          }
          </View>
        );
      }
    }
    
    export const styles = StyleSheet.create({
      container: {
        flex:1,
        backgroundColor: "#c0d6e4"
      },
      overlay: {
        position: "absolute",
        top: 0,
        right: 0,
        bottom: 0,
        left: 0,
        justifyContent: "center",
        alignItems: "center",
        backgroundColor: "gray",
        opacity: 0.9,
      },
      text: {
        width: "20%",
        fontSize: 15,
        color: "black",
        fontWeight: "bold"
      },
    });

    0 讨论(0)
  • 2020-12-23 14:20

    import React, { Component } from 'react';
    import { Image, StyleSheet, View } from 'react-native';
    
    export default class App extends Component {
      render() {
        return (
          <Image source={{uri: 'http://i.imgur.com/IGlBYaC.jpg'}} style={s.backgroundImage}>
            <View style={s.overlay}/>
          </Image>
        );
      }
    }
    
    const s = StyleSheet.create({
      backgroundImage: {
          flex: 1,
          width: null,
          height: null,
      },
      overlay: {
        position: 'absolute',
        top: 0,
        right: 0,
        bottom: 0,
        left: 0,
        backgroundColor: 'red',
        opacity: 0.3
      }
    });
    

    Live demo: https://sketch.expo.io/S15Lt3vjg

    Source repo: https://github.com/Dorian/sketch-reactive-native-apps

    0 讨论(0)
  • 2020-12-23 14:29

    Smartest way ??

    the smartest way to me is to use Modals from react-native to build a highly customizable responsive experience, you can easily set motion directions of the Modal, set transparency, toggle visibility etc etc, i personally have never user existing npm modules for implementing side drawers or navigation bars, i do this using Modals.
    If you wish i can give a sample code snippet which realizes a navigation drawer using Modals

    0 讨论(0)
提交回复
热议问题