Как я могу добиться дизайна ниже в React Native?

Я немного застрял здесь, чтобы добиться дизайна ниже в одном из моих приложений.

Как я могу добиться дизайна ниже в React Native?

Мой код здесь,

<View style = {{flex: 1, backgroundColor: '#fff', alignItems: 'center'}}>
        <View style = {{backgroundColor: 'rgb(25,195,192)', width: '100%', height: '40%', borderBottomLeftRadius: 100, borderBottomRightRadius: 100}}>
        </View>
</View>

Я еще не добавил текст, но я хочу, чтобы граница была изогнутой, как изображение, и это не получается.

Любая помощь будет оценена по достоинству.

Я думаю, например, что вы можете поместить <Image> внутрь <TouchableOpacity>. Затем у вас может быть изображение, подобное вашему, и его можно коснуться для запуска функций.

Naeim Fard 12.04.2019 08:48

нет, я хочу сделать view что-то вроде image @NaeimFard

Hardik Virani 12.04.2019 08:49
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
2
2 010
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте следующий стиль для вашего изогнутого вида,

curvedViewStyle: {
    borderRadius: window.width,
    width: window.width * 2,
    height: window.width * 2,
    marginLeft: -(window.width / 2),
    position: "absolute",
    bottom: 0,
    overflow: "hidden",
    backgroundColor: "red"
  },

и не забудьте добавить «окно» сверху, const window = Dimensions.get("window");

но мне нужно только в верхней части 30% часть @Jebin

Hardik Virani 12.04.2019 08:58

Изменив стиль, вы тоже можете добиться этого.

Jebin Benny 12.04.2019 09:01

я не могу получить то же самое

Hardik Virani 12.04.2019 09:02

Или вы можете искать с помощью этого: github.com/react-native-community/react-native-svg#readme, и использовать круг. <Круг cx = {screenWidth / 2} cy = {-${898 - headerHeight + 2}} r = "898.5" fill = "#EFF2F3" stroke = "#C5CACD" strokeWidth = "2" />

Jebin Benny 12.04.2019 09:05

получаю ошибку в библиотеке Unable to resolve “./patternReg” from "node_modules\react-native-svg\lib\extract\extractProps.js

Hardik Virani 12.04.2019 10:42

Этот код в порядке, вам просто нужно правильно перевести его наверх: top: (-window.width * 13) / 10 или любое другое значение, которое вы хотите. Также marginLeft: -(window.width / 2) не нужен. Вы можете попробовать здесь

Milore 12.04.2019 11:29

Чтобы получить круг, вам нужно создать квадрат (ширина === высота) и установить для свойства borderRadius значение, равное половине его ширины или высоты.

В твоем случае; вам нужно рассчитать значение для получения только 30% отображения нижней стороны (используйте отрицательный marginTop), а также рассчитать, как значение для обеспечения того, чтобы центр круга был таким же, как центр ширины экрана (используйте отрицательный поле слева). Ниже приведен пример этого.

render() {
    return (
      <View style = {myStyle.container}>
        <View style = {myStyle.top_background}>
          <View style = {myStyle.top_content}>
            <Text style = {myStyle.text1}>Hey there</Text>
            <Text style = {myStyle.text1}>WHAT'S UP</Text>
            <Text style = {myStyle.text1}>Doc'?</Text>
            <Text style = {myStyle.text2}>BUGS BUNNY</Text>
          </View>
        </View>
      </View>
    );
}

и таблица стилей

const sWidth  = Dimensions.get('window').width;
const sHeight = Dimensions.get('window').height;
const ratio   = sWidth / sHeight; //sWidth = ratio * sHeight
const myStyle = StyleSheet.create({
  container: {
    width: sWidth,
    height: sHeight,
    backgroundColor: '#fff'
  },
  top_background: {
    width: sHeight * 2,
    height: sHeight * 2,
    borderRadius: sHeight * 1,
    borderTopLeftRadius: 0,
    borderTopRightRadius: 0,
    backgroundColor: '#aaa',
    alignItems: 'center',
    marginLeft: ((ratio * sHeight) * 0.5) - (sHeight),
    marginTop: -sHeight * 1.7,
    paddingTop: sHeight * 1.7,
  },
  top_content: {
    paddingTop: sHeight * 0.02,
    width: sWidth,
    height: sHeight * 0.3,
    alignItems: 'center',
  },
  text1: {
    fontSize: 14,
    color: '#fff'
  },  
  text2: {
    marginTop: sHeight * 0.1,
    fontSize: 25,
    fontWeight: 'bold',
    color: '#fff'
  }
});

marginTop и paddingTop в top_background предназначены только для использования верхних 30% экрана и запускают содержимое в разделе, который можно увидеть на экране соответственно.

Ответ принят как подходящий

Вы можете добиться такого дизайна кривой, используя SVG. SVG предоставляет несколько элементов и их свойства (Прямоугольник, Круг, Линия, Полилиния, Многоугольник, G и т. д.). Вы можете настроить дизайн в соответствии с вашими потребностями.

https://www.npmjs.com/package/react-native-svg?activeTab=версии

import Svg,{ Circle } from 'react-native-svg';


<Circle 
       cx = {screenWidth / 2}
       cy = {`-${898 - headerHeight + 2}`} 
       r = "898.5" fill = "#87ceeb"
       stroke = "#87ceeb" 
      strokeWidth = "2" 
/>

Другие вопросы по теме