You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
3.6 KiB

import React, { Component } from 'react';
import {
Platform,
StyleSheet,
Image,
ListView,
Text,
ScrollView,
TextInput,
TouchableHighlight,
View
} from 'react-native';
import RunInfo from './components/run-info';
import RunInfoNumeric from './components/run-info-num';
import MapView from 'react-native-maps';
const instructions = Platform.select({
ios: 'Press Cmd+R to reload,\n' +
'Cmd+D or shake for dev menu',
android: 'Double tap R on your keyboard to reload,\n' +
'Shake or press menu button for dev menu',
});
type Props = {};
let id = 0;
export default class App extends Component<Props> {
constructor(props) {
super(props);
this.state = { markers: [] };
setInterval(() => {
this.distanceInfo.setState({value: Math.random() * 100});
this.speedInfo.setState({value: Math.random() * 15});
this.directionInfo.setState({value: this.directionInfo.state === 'N' ? 'NW' : 'N'});
}, 1000);
let watchID = navigator.geolocation.watchPosition((position) => {
this.setState({
markers: [
...this.state.markers, {
coordinate: position.coords,
key: id++
}
]
}, null, {distanceFilter: 1});
});
this.state = {markers: [], watchID };
}
componentWillUnmount() {
navigator.geolocation.stopWatch(this.state.watchID);
}
render() {
return (
<View style ={{flex: 1}}>
<MapView
showsUserLocation
style = {styles.map}
initialRegion={{
latitude: -43.5610623,
longitude: 172.5655853,
latitudeDelta: 0.02,
longitudeDelta: 0.02,
}}
// onRegionChange = {(region)=> this.addMarker((region))}
>
<MapView.Polyline
coordinates={this.state.markers.map((marker) => marker.coordinate)}
strokeWidth={5}
/>
{/*{this.state.markers.map((marker) => (*/}
{/*<MapView.Marker coordinate = {marker.coordinate} key={marker.key} />*/}
{/*))}*/}
</MapView>
<View style={styles.infoWrapper}>
<RunInfoNumeric title = "Distance"
unit="km"
ref={(info) => this.distanceInfo = info}
/>
<RunInfoNumeric title = "Speed"
unit="km/h"
ref={(info) => this.speedInfo = info}
/>
<RunInfo title = "Direction"
value = "NE"
ref={(info) => this.directionInfo = info}
/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
infoWrapper: {
position: 'absolute',
left: 0,
bottom: 0,
right: 0,
flexDirection: 'row',
flex: 1
},
map: {
...StyleSheet.absoluteFillObject
},
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
},
});