forked from MoMask/react-native-ok-gesture-password
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Arrow.js
67 lines (57 loc) · 1.55 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'}]
}]}/>
);
}
}