-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathArrow.js
67 lines (57 loc) · 1.78 KB
/
Arrow.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import React, {
Component,
} from 'react'
import {
StyleSheet,
View,
} from 'react-native'
import PropTypes from 'prop-types'
import * as Utils from './Utils'
const styles = StyleSheet.create({
container: {
position: 'absolute',
}
})
export default class Arrow extends Component {
static defaultProps = {
vertexDeg: 90,
}
static propTypes = {
vertexDeg: PropTypes.number,
start: PropTypes.shape({
x: PropTypes.number.isRequired,
y: PropTypes.number.isRequired,
}).isRequired,
end: PropTypes.shape({
x: PropTypes.number.isRequired,
y: PropTypes.number.isRequired,
}).isRequired,
width: PropTypes.number.isRequired,
color: PropTypes.string.isRequired,
}
// 构造
constructor(props) {
super(props)
// 初始状态
this.state = {}
this._borderWidth = props.width / 3 * 2
this._transform = Utils.getArrowTransform(props.start, props.end, props.width, this._borderWidth, props.vertexDeg)
}
render () {
return (
<View
style={[styles.container, {
borderWidth: this._borderWidth,
borderLeftColor: this.props.color,
borderRightColor: 'transparent',
borderTopColor: 'transparent',
borderBottomColor: 'transparent',
left: this._transform.origin.x,
top: this._transform.origin.y,
transform: [{translateX: this._transform.translateX},
{translateY: this._transform.translateY},
{rotateZ: this._transform.rotateRad + 'rad'}]
}]}/>
)
}
}