Pracuję nad budową aplikacji React Native na podstawie projektów naszego projektanta. Projekt ma kilka miejsc, w których znajdują się przyciski lub kształty z jedną linią ukośną (patrz poniższy przykład). Próbowałem już używać SkewX
, ale wydaje się, że po prostu obraca cały kształt (i nie wydaje się działać na Androida w każdym razie). Jak mogę narysować prostokąt/przycisk z przekątną po jednej stronie?Jak utworzyć przekątną w trybie React Native?
Odpowiedz
Można zastosować css do View
klasy i stworzyć pożądany wynik, Herezje mały kod demo wersja edytowany
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'
}
});
Wynik:
dzięki! to jest naprawdę interesujące. W projekcie w moim oryginalnym poście, druga część przycisku (szara część w twojej) jest rzeczywiście biała z szarą obwódką. ponieważ ta metoda wymaga użycia granicy, aby rzeczywiście utworzyć przekątną, w jaki sposób mogę osiągnąć granicę? Czy muszę utworzyć identyczny "triangleCorner1" z wyjątkiem 2 punktów mniejszych i 1 punktu mniejszych na białym tle i nałożonych na szarą? wydaje się naprawdę nużący! > _ < – user2719094
Wiem, że jest to trochę żmudne, ale nakładka to jedyna opcja, którą znam z –
Użyj CALayer
dla tego rodzaju kształtu.
poniższy kod na to:
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)
To pytanie dotyczy React Native. Ten kod wydaje się być Swift. – user2719094
http://browniefed.com/blog/the-shapes-of-react-native/ przewiń do równoległoboku. –