//Compass.js import React, { useEffect, useState } from "react"; import CompassHeading from "react-native-compass-heading"; import { View, Text, StyleSheet, Image, Animated } from "react-native"; const Compass = () => { const [heading, setHeading] = useState(0); const rotateValue = new Animated.Value(0); useEffect(() => { const degreeUpdateRate = 3; CompassHeading.start(degreeUpdateRate, ({ heading, accuracy }) => { console.log("CompassHeading: ", heading, accuracy); setHeading(heading); // Rotate the compass image Animated.timing(rotateValue, { toValue: heading, duration: 100, useNativeDriver: false, }).start(); }); return () => { CompassHeading.stop(); }; }, []); const rotateStyle = { transform: [{ rotate: `${-heading}deg` }], }; const getCardinalDirection = () => { const directions = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"]; const index = Math.round(heading / 45) % 8; return directions[index]; }; return ( <View style={styles.container}> <Text style={styles.appName}>Beautiful Compass App</Text> <View style={styles.compassContainer}> <Animated.Image source={ require(" https://media.geeksforgeeks.org/wp-content/uploads/20240122153821/compass.png" )} style={[styles.compassImage, rotateStyle]} /> </View> <Text style={styles.headingValue}>{`Heading: ${heading.toFixed( 2 )}°`}</Text> <Text style={styles.cardinalDirection} >{`Direction: ${getCardinalDirection()}`}</Text> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: "center", alignItems: "center", backgroundColor: "#f5f5f5", }, appName: { fontSize: 24, fontWeight: "bold", marginBottom: 10, color: "#333", }, compassContainer: { width: 250, height: 250, justifyContent: "center", alignItems: "center", backgroundColor: "#fff", borderRadius: 125, shadowColor: "#000", shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.3, shadowRadius: 3, elevation: 5, }, compassImage: { width: 200, height: 200, }, headingValue: { fontSize: 18, marginTop: 10, color: "#555", }, cardinalDirection: { fontSize: 18, marginTop: 10, color: "#555", }, }); export default Compass;