প্রতিক্রিয়া নেটিভে স্বচ্ছ দৃষ্টির পটভূমির রঙ কীভাবে সেট করবেন


139

এটি আমি ব্যবহার করার দৃশ্যের স্টাইল

backCover: {
  position: 'absolute',
  marginTop: 20,
  top: 0,
  bottom: 0,
  left: 0,
  right: 0,
}

বর্তমানে এটির একটি সাদা ব্যাকগ্রাউন্ড রয়েছে। আমি ব্যাকগ্রাউন্ড '#343434'কালারটিকে আমার পছন্দ মতো পরিবর্তন করতে পারি তবে এটি রঙের জন্য কেবলমাত্র সর্বোচ্চ 6 টি হেক্সভ্যালু গ্রহণ করে তাই আমি সেই পছন্দটিতে অস্বচ্ছতা দিতে পারি না '#00ffffff'। আমি এই ধরণের অস্পষ্টতা ব্যবহার করার চেষ্টা করেছি

backCover: {
  position: 'absolute',
  marginTop: 20,
  top: 0,
  bottom: 0,
  left: 0,
  right: 0,
  opacity: 0.5,
}

তবে এটি দেখার বিষয়বস্তুর দৃশ্যমানতা হ্রাস করে। তাহলে কোন উত্তর?

উত্তর:


288

ব্যবহার করুন rgbaজন্য মান backgroundColor

উদাহরণ স্বরূপ,

backgroundColor: 'rgba(52, 52, 52, 0.8)'

এটি 80% অস্বচ্ছতার সাথে ধূসর রঙে সেট করে, যা অস্বচ্ছ দশমিক থেকে প্রাপ্ত 0.8। এই মান থেকে কিছু হতে 0.0পারে 1.0


পৃথিবীতে কেন কালার ভ্যালস 8 বিট এবং আলফা ভ্যালস ভাসমান?
duhaime

@ দুহাইম, কেন নির্দিষ্টভাবে তা নিশ্চিত নন, তবে 8-বিটগুলি একটি স্মৃতিশক্তি থেকে বোঝায় (বিশেষত historতিহাসিকভাবে)। আলফা মানগুলি সর্বনিম্ন স্বচ্ছ বা সম্পূর্ণ অস্বচ্ছতার জন্য ন্যূনতম এবং সর্বনিম্ন 0 এবং 1 হিসাবে আরও বেশি ধারণা দেয়। উদাহরণস্বরূপ, আপনি যদি 25% স্বচ্ছ হতে চান তবে 255 এর 1/4 র্থটি কী তা নির্ধারণ করতে চান না।
কোজো 7

104

নিম্নলিখিতটি সূক্ষ্মভাবে কাজ করে:

backgroundColor: 'rgba(52, 52, 52, alpha)'

আপনি চেষ্টা করতে পারেন:

backgroundColor: 'transparent'

2
ব্যাকগ্রাউন্ড কালার: 'স্বচ্ছ' হ'ল এখন পর্যন্ত সবচেয়ে সহজ সমাধান।
নাথানএল

27

backgroundColor: '#00000000' এটি চেষ্টা করুন এটি ব্যাকগ্রাউন্ড রঙ স্বচ্ছ হিসাবে সেট করবে, এটি #rrggbbaa হেক্স কোড অনুসরণ করে


কোনও কারণে, এই বৈকল্পিকটি অস্বচ্ছতার সাথে ফলাফলের রঙটি ভুলভাবে প্রদর্শন করে। আমি যদি ভুল না করি তবে এটি আরএন-এ একটি বাগ। সুতরাং rgbaউপায় ব্যবহার ভাল ।
Shyngys Kassymov

1
@ শাইনিজক্যাসিমভ gist.github.com/lopspower/03fb1cc0ac9f32ef38f4 এটি দেখুন
ওও

@ ও আকর্ষণীয়, এটি উপলব্ধি করে। নির্দেশ করার জন্য ধন্যবাদ! তবে rgba
আইএমওটি উপায়টি

এর অর্থ কি এর পরিবর্তে ফর্ম্যাটটি #aarrggbb হওয়া উচিত?
শাইনিজ কাসিমভ

আমি বোঝাতে চাইছি আপনি হেক্সাভ্যালু ব্যবহার করতে পারেন rrggbbaa
ওও

3

আইওএস এবং আরজিবিএ ব্যাকগ্রাউন্ডের সাথে বিদ্যমান দ্বন্দ্ব সম্পর্কে আপনার সচেতন হওয়া উচিত।

সংক্ষিপ্তসার: পাবলিক রিএ্যাক্ট নেটিভ বর্তমানে আইওএস লেয়ার শেডের বৈশিষ্ট্যগুলি আরও কম-বেশি সরাসরি উন্মুক্ত করে, তবে এর সাথে বেশ কয়েকটি সমস্যা রয়েছে:

1) এই বৈশিষ্ট্যগুলি ব্যবহার করার সময় পারফরম্যান্স ডিফল্টরূপে দুর্বল। এর কারণ আইওএস কোনও ট্রান্সলুসেন্ট সামগ্রী এবং এর সমস্ত সাবভিউ সহ হ'ল পিক্সেল মাস্কের ভিউটি সুনির্দিষ্ট করে, যা খুব সিপিইউ এবং জিপিইউ-নিবিড়। 2) আইওএস শ্যাডো বৈশিষ্ট্যগুলি সিএসএস বক্স-ছায়া মানের সিনট্যাক্স বা শব্দার্থের সাথে মেলে না এবং অ্যান্ড্রয়েডে প্রয়োগ করা সম্ভব হওয়ার সম্ভাবনা কম। 3) আমরা layer.shadowPathসম্পত্তিটি প্রকাশ করি না , যা স্তর ছায়া থেকে ভাল পারফরম্যান্স পাওয়ার পক্ষে গুরুত্বপূর্ণ।

এই পার্থক্যটি সমস্যা নম্বর 1 সমাধান করে) shadowPathএকটি অস্বচ্ছ ব্যাকগ্রাউন্ডের সাথে দর্শনগুলির জন্য দর্শন সীমানাকে মেলে এমন একটি ডিফল্ট প্রয়োগ করে । এটি সাধারণ ব্যবহারের ক্ষেত্রে অনুকূল হয়ে ছায়ার কার্য সম্পাদনকে উন্নত করে। আমি এমন দৃশ্যের জন্য ব্যাকগ্রাউন্ড রঙের প্রচারও পুনঃস্থাপন করেছি যার ছায়ার প্রপস রয়েছে - এটি এই ক্ষেত্রে সবচেয়ে বেশি ভাল ঘটনাটি প্রায়ই ঘটে তা নিশ্চিত করতে সহায়তা করা উচিত।

সুস্পষ্ট স্বচ্ছ পটভূমি সহ দর্শনগুলির জন্য, ছায়াটি আগের মতো কাজ করা চালিয়ে shadowPathযাবে ( আনসেটটি ছেড়ে দেওয়া হবে, এবং ছায়াটি দৃশ্যের পিক্সেল এবং এর সংক্ষিপ্তসারগুলি থেকে পাওয়া যাবে)। এটি পারফরম্যান্সের জন্য সবচেয়ে খারাপ অবস্থার পথ, তবে একেবারে প্রয়োজনীয় না হলে আপনার এড়ানো উচিত। এর জন্য সমর্থন ভবিষ্যতে ডিফল্টরূপে অক্ষম হতে পারে, বা পুরোপুরি বাদ দেওয়া যেতে পারে।

স্বচ্ছ চিত্রগুলির জন্য, আপনাকে পরামর্শ দেওয়া হয় যে আপনি ছায়াকে ইমেজটিতেই বেক করুন, বা ছায়াটিকে প্রাক-উত্পন্ন করতে অন্য কোনও প্রক্রিয়া ব্যবহার করুন। পাঠ্য ছায়ার জন্য, আপনার পাঠ্য শ্যাডো বৈশিষ্ট্যগুলি ব্যবহার করা উচিত, যা ক্রস প্ল্যাটফর্মের কাজ করে এবং আরও ভাল পারফরম্যান্স করে।

সমস্যা নম্বর 2) ভবিষ্যতের পার্থক্যের মধ্যে সমাধান করা হবে, সম্ভবত iOS শ্যাডএক্সএক্সএক্সএক্স বৈশিষ্ট্যগুলির নাম বক্স শ্যাডোএক্সএক্সএক্স, এবং সিএসএস মানগুলির সাথে মেলে সিনট্যাক্স এবং শব্দার্থবিজ্ঞান পরিবর্তন করে।

সমস্যা নম্বর 3) এখন বেশিরভাগই মোট, যেহেতু আমরা স্বয়ংক্রিয়ভাবে শ্যাডোপথ তৈরি করি। ভবিষ্যতে, ছায়ার আরও সুনির্দিষ্ট নিয়ন্ত্রণের দাবি থাকলে আমরা স্পষ্টভাবে পথ নির্ধারণের জন্য একটি আইওএস-নির্দিষ্ট প্রাপ সরবরাহ করতে পারি।

পর্যালোচনা দ্বারা: ওয়েইকুল

প্রতিশ্রুতিবদ্ধ: https://github.com/facebook/react-native/commit/e4c53c28aea7e067e48f5c8c0100c7cafc031b06


2

আশ্চর্যজনকভাবে কেউ এ সম্পর্কে কিছু বলেনি, যা কিছু সরবরাহ করে!

style={{
backgroundColor: 'white',
opacity: 0.7
}}

6
এই সমাধানটি কেবলমাত্র তার পটভূমিতে নয়, সম্পূর্ণ দৃষ্টিভঙ্গির জন্য অস্বচ্ছতা সংজ্ঞায়িত করে, ফলস্বরূপ এটির সমস্ত শিশুও আধা-অস্বচ্ছ হয়ে উঠবে (এটি আসলে আসল প্রশ্নে উল্লিখিত)
কুল সফট

-1

এখানে এমন কোনও মডেলের আমার সমাধান যা কোনও স্ক্রিনে রেন্ডার এবং অ্যাপ.এসটিএক্স এ আরম্ভ করা যেতে পারে

ModalComponent.tsx

import React, { Component } from 'react';
import { Modal, Text, TouchableHighlight, View, StyleSheet, Platform } from 'react-native';
import EventEmitter from 'events';
// I keep localization files for strings and device metrics like height and width which are used for styling 
import strings from '../../config/strings';
import metrics from '../../config/metrics';

const emitter = new EventEmitter();
export const _modalEmitter = emitter

export class ModalView extends Component {
    state: {
        modalVisible: boolean,
        text: string, 
        callbackSubmit: any, 
        callbackCancel: any,
        animation: any
    }

    constructor(props) {
        super(props)
        this.state = {
            modalVisible: false,
            text: "", 
            callbackSubmit: (() => {}), 
            callbackCancel: (() => {}),
            animation: new Animated.Value(0)
        } 
    }

    componentDidMount() {
        _modalEmitter.addListener(strings.modalOpen, (event) => {
            var state = {
                modalVisible: true,
                text: event.text, 
                callbackSubmit: event.onSubmit, 
                callbackCancel: event.onClose,
                animation: new Animated.Value(0)
            } 
            this.setState(state)
        })
        _modalEmitter.addListener(strings.modalClose, (event) => {
            var state = {
                modalVisible: false,
                text: "", 
                callbackSubmit: (() => {}), 
                callbackCancel: (() => {}),
                animation: new Animated.Value(0)
            } 
            this.setState(state)
        })
    }

    componentWillUnmount() {
        var state = {
            modalVisible: false,
            text: "", 
            callbackSubmit: (() => {}), 
            callbackCancel: (() => {})
        } 
        this.setState(state)
    }

    closeModal = () => {
        _modalEmitter.emit(strings.modalClose)
    }

    startAnimation=()=>{
        Animated.timing(this.state.animation, {
            toValue : 0.5,
            duration : 500
        }).start()
    }

    body = () => {
        const animatedOpacity ={
            opacity : this.state.animation
        }
        this.startAnimation()
        return (
            <View style={{ height: 0 }}>
                <Modal
                    animationType="fade"
                    transparent={true}
                    visible={this.state.modalVisible}>

                    // render a transparent gray background over the whole screen and animate it to fade in, touchable opacity to close modal on click out

                    <Animated.View style={[styles.modalBackground, animatedOpacity]} > 
                        <TouchableOpacity onPress={() => this.closeModal()} activeOpacity={1} style={[styles.modalBackground, {opacity: 1} ]} > 
                        </TouchableOpacity>
                    </Animated.View>

                    // render an absolutely positioned modal component over that background
                    <View style={styles.modalContent}>

                        <View key="text_container">
                            <Text>{this.state.text}?</Text>
                        </View>
                        <View key="options_container">
                            // keep in mind the content styling is very minimal for this example, you can put in your own component here or style and make it behave as you wish
                            <TouchableOpacity
                                onPress={() => {
                                    this.state.callbackSubmit();
                                }}>
                                <Text>Confirm</Text>
                            </TouchableOpacity>

                            <TouchableOpacity
                                onPress={() => {
                                    this.state.callbackCancel();
                                }}>
                                <Text>Cancel</Text>
                            </TouchableOpacity>

                        </View>
                    </View>
                </Modal>
            </View> 
        );
    }

    render() {
        return this.body()
    }
}

// to center the modal on your screen 
// top: metrics.DEVICE_HEIGHT/2 positions the top of the modal at the center of your screen
// however you wanna consider your modal's height and subtract half of that so that the 
// center of the modal is centered not the top, additionally for 'ios' taking into consideration
// the 20px top bunny ears offset hence - (Platform.OS == 'ios'? 120 : 100)
// where 100 is half of the modal's height of 200
const styles = StyleSheet.create({
    modalBackground: {
        height: '100%', 
        width: '100%', 
        backgroundColor: 'gray', 
        zIndex: -1 
    },
    modalContent: { 
        position: 'absolute', 
        alignSelf: 'center', 
        zIndex: 1, 
        top: metrics.DEVICE_HEIGHT/2 - (Platform.OS == 'ios'? 120 : 100), 
        justifyContent: 'center', 
        alignItems: 'center', 
        display: 'flex', 
        height: 200, 
        width: '80%', 
        borderRadius: 27,
        backgroundColor: 'white', 
        opacity: 1 
    },
})

App.tsx রেন্ডার এবং আমদানি করে

import { ModalView } from './{your_path}/ModalComponent';

render() {
    return (
        <React.Fragment>
            <StatusBar barStyle={'dark-content'} />
            <AppRouter />
            <ModalView />
        </React.Fragment>
    )
}

এবং এটি কোনও উপাদান থেকে ব্যবহার করতে

SomeComponent.tsx

import { _modalEmitter } from './{your_path}/ModalComponent'

// Some functions within your component

showModal(modalText, callbackOnSubmit, callbackOnClose) {
    _modalEmitter.emit(strings.modalOpen, { text: modalText, onSubmit: callbackOnSubmit.bind(this), onClose: callbackOnClose.bind(this) })
}

closeModal() {
    _modalEmitter.emit(strings.modalClose)
}

আশা করি আমি আপনাদের কয়েকজনকে সহায়তা করতে পেরেছি, অ্যাপ-ইন বিজ্ঞপ্তিগুলির জন্য আমি খুব অনুরূপ কাঠামোটি ব্যবহার করেছি

শুভ কোডিং

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.