Я работаю над созданием приложения React Native на основе дизайна от нашего дизайнера. Конструкция имеет несколько мест, где есть кнопки или фигуры с одной диагональной линией (см. Следующий пример). Я пробовал использовать SkewX
, но это просто похоже на поворот всей фигуры (и, похоже, не работает на Android). Как я могу нарисовать прямоугольник/кнопку с диагональной рамкой на одной стороне?
Как создать диагональную границу в React Native?
Ответ 1
Вы можете применить класс css к классу View
и создать желаемый результат,
Heres небольшой демонстрационный код отредактированной версии
import React, { Component } from 'react';
import { View, StyleSheet } from 'react-native';
import { Constants } from 'expo';
export default class App extends Component {
render() {
return (
<View style={styles.container}>
<View style={styles.triangleCorner}></View>
<View style={styles.triangleCornerLayer}></View>
<View style={styles.triangleCorner1}></View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
},triangleCorner: {
position: 'absolute',
top:105,
left:0,
width: 300,
height: 100,
backgroundColor: 'transparent',
borderStyle: 'solid',
borderRightWidth: 50,
borderTopWidth: 80,
borderRightColor: 'transparent',
borderTopColor: 'gray'
},triangleCorner1: {
position: 'absolute',
top:100,
left:0,
width: 130,
backgroundColor: 'transparent',
borderStyle: 'solid',
borderRightWidth: 50,
borderTopWidth: 90,
borderRightColor: 'transparent',
borderTopColor: 'green'
},triangleCornerLayer: {
position: 'absolute',
top:107,
left:0,
width:297,
height: 100,
backgroundColor: 'transparent',
borderStyle: 'solid',
borderRightWidth: 47,
borderTopWidth: 75,
borderRightColor: 'transparent',
borderTopColor: 'white'
}
});
Результат:
Ответ 2
Используйте CALayer
для этой формы.
Ниже код для этого:
let layer = CAShapeLayer()
let path = UIBezierPath()
path.move(to: CGPoint(x: 0, y: 0))
path.addLine(to: CGPoint(x: 150, y: 0))
path.addLine(to: CGPoint(x: 100, y: 50))
path.addLine(to: CGPoint(x: 0, y: 50))
path.close()
layer.path = path.cgPath
layer.fillColor = UIColor.green.cgColor
layer.strokeColor = UIColor.clear.cgColor
view.layer.addSublayer(layer)
let layer1 = CAShapeLayer()
path.move(to: CGPoint(x: 100, y: 45))
path.addLine(to: CGPoint(x: 300, y: 45))
path.addLine(to: CGPoint(x: 350, y: 5))
path.addLine(to: CGPoint(x: 150, y: 5))
path.close()
layer1.path = path.cgPath
layer1.fillColor = UIColor.clear.cgColor
layer1.strokeColor = UIColor.black.cgColor
view.layer.addSublayer(layer1)