Я немного застрял здесь, чтобы добиться дизайна ниже в одном из моих приложений.
Мой код здесь,
<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>
Я еще не добавил текст, но я хочу, чтобы граница была изогнутой, как изображение, и это не получается.
Любая помощь будет оценена по достоинству.
нет, я хочу сделать view что-то вроде image @NaeimFard





Используйте следующий стиль для вашего изогнутого вида,
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
Изменив стиль, вы тоже можете добиться этого.
я не могу получить то же самое
Или вы можете искать с помощью этого: 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" />
получаю ошибку в библиотеке Unable to resolve “./patternReg” from "node_modules\react-native-svg\lib\extract\extractProps.js
Этот код в порядке, вам просто нужно правильно перевести его наверх: top: (-window.width * 13) / 10 или любое другое значение, которое вы хотите. Также marginLeft: -(window.width / 2) не нужен. Вы можете попробовать здесь
Чтобы получить круг, вам нужно создать квадрат (ширина === высота) и установить для свойства 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"
/>
Я думаю, например, что вы можете поместить <Image> внутрь <TouchableOpacity>. Затем у вас может быть изображение, подобное вашему, и его можно коснуться для запуска функций.