Чи підтримують рідні стилі React градієнти?


Відповіді:


53

Не зараз. Ви повинні користуватися бібліотекою, яку ви зв’язали; нещодавно вони додали підтримку Android, і це один з основних факторів, що сприяють реагуванню.


7

Спочатку біжи 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);

5

Ви можете спробувати цей код JS .. https://snack.expo.io/r1v0LwZFb

import React, { Component } from 'react';
import { View } from 'react-native';

export default class App extends Component {
  render() {
    const gradientHeight=500;
    const gradientBackground  = 'purple';
        const data = Array.from({ length: gradientHeight });
        return (
            <View style={{flex:1}}>
                {data.map((_, i) => (
                    <View
                        key={i}
                        style={{
                            position: 'absolute',
                            backgroundColor: gradientBackground,
                            height: 1,
                            bottom: (gradientHeight - i),
                            right: 0,
                            left: 0,
                            zIndex: 2,
                            opacity: (1 / gradientHeight) * (i + 1)
                        }}
                    />
                ))}
            </View>
        );
  }
}

1
Як відобразити текст за цим градієнтом?
Мозак

Приємні рішення, це працює. Але я хочу, щоб текст та кнопки відображались у градієнтному вигляді. Як я можу це зробити?
Крістіна

42
Цей код створює сотні переглядів, що має наслідки для продуктивності. Це дуже хакі обхідний шлях, а не готове рішення для виробництва. Замість цього використовуйте пакет реакція-рідний-лінійний-градієнт.
Бруно Лемос

9
Звичайно, це не готове рішення для виробництва, але для мене дивно, що ви придумали таке рішення. Згинати речі до своїх потреб - це, безумовно, рідкісна здатність.
ArkaneKhan

1
@BrunoLemos, хоч би я прочитав ваші коментарі до вивчення цього варіанту;))
Oo -_- oO

3

Шукаючи подібне рішення, я щойно натрапив на цей абсолютно новий підручник, який дозволяє з’єднати Swift фоновий градієнт ( https://github.com/soffes/GradientView ) під час проходження кожного кроку, щоб отримати робочий компонент React.

Це покроковий посібник, що дозволяє вам створити власний компонент, поєднавши компонент swift і object-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/


1
Найкраще включити у свою відповідь якомога більше посилань на сайт. У такому вигляді вона, ймовірно, буде видалена як відповідь "лише за посиланням". Погляньте на поширені запитання щодо "як дати хорошу відповідь". Ура.
stef

3

Ось хороший вибір для градієнтів для обох платформ iOS та Android:

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

Є й інші підходи, як expo, однак реакція-рідний-лінійний-градієнт для мене спрацювала краще.

<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',
  },
});

2

Просто експортуйте свій градієнт як SVG і використовуйте його, використовуючи react-native-svgі коли після імпорту компонента встановіть ширину та висоту та preserveAspectRatio="xMinYMin slice"масштабуйте градієнт SVG відповідно до ваших потреб.


1
Ця відповідь також заслуговує на коментар💪. Сотні розробників використовують бібліотеку response-native-svg і все ще встановлюють більше бібліотек із продубльованим функціоналом😭. Я шокуюче прокручував вниз, що ніхто про це не згадував і думав, що я можу бути найрозумнішим🤷🏼‍♂️.
Алекс Штромберг,

1

React Native ще не надав кольору градієнта. Але все-таки ви можете зробити це за допомогою пакета nmp, що називається, react-native-linear-gradientабо натисніть тут для отримання додаткової інформації

  1. npm install react-native-linear-gradient --save
  2. використовувати import LinearGradient from 'react-native-linear-gradient';у файлі вашої програми
  3.         <LinearGradient colors={['#4c669f', '#3b5998', '#192f6a']}>
              <Text>
                Your Text Here
              </Text>
            </LinearGradient> 


0

Ось готове чисте рішення 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

реакція-рідний-слайдер-підбір кольору

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.