From d50301cb04837b196110cea43ff15c0493c5fac2 Mon Sep 17 00:00:00 2001 From: Chris Sanden Date: Tue, 21 Apr 2026 18:45:18 +0200 Subject: [PATCH] First draft of timer element --- app/(tabs)/timer.tsx | 180 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 app/(tabs)/timer.tsx diff --git a/app/(tabs)/timer.tsx b/app/(tabs)/timer.tsx new file mode 100644 index 0000000..9e455d1 --- /dev/null +++ b/app/(tabs)/timer.tsx @@ -0,0 +1,180 @@ +import * as React from 'react'; +import { + Animated, + Dimensions, + StatusBar, + StyleSheet, + TouchableOpacity, + View +} from 'react-native'; +const { width, height } = Dimensions.get('window'); + +const colors = { + black: '#323F4E', + red: '#F76A6A', + text: '#ffffff', +}; + +const timers = [...Array(13).keys()].map((i) => (i === 0 ? 1 : i * 5)); +const ITEM_SIZE = width * 0.38; +const ITEM_SPACING = (width - ITEM_SIZE) / 2; + +/* +Har bare skrevet timeren som en egen tab til å begynne med. +Planen er at når bruker starter en task så vil de få opp denne timeren +som viser TaskName og Description der tallene står nå +Kanskje en animert figur hvis vi får tid +*/ +export default function App() { + const scrollX = React.useRef(new Animated.Value(0)).current; + const [duration, setDuration] = React.useState(timers[0]) + const timerAnimation = React.useRef(new Animated.Value(height)).current + const buttonAnimation = React.useRef(new Animated.Value(0)).current + const animation = React.useCallback(() => { + Animated.sequence([ + Animated.timing(buttonAnimation, { + toValue: 1, + duration: 300, + useNativeDriver: true + }), + Animated.timing(timerAnimation, { + toValue: 0, + duration: 300, + useNativeDriver: true + }), + Animated.timing(timerAnimation, { + toValue: height, + duration: duration * 1000, + useNativeDriver: true + }), + ]) .start(() => { + Animated.timing(buttonAnimation, { + toValue: 0, + duration: 300, + useNativeDriver: true + }).start() + }) + }, [duration]) + + const opacity = buttonAnimation.interpolate({ + inputRange: [0, 1], + outputRange: [1, 0] + }) + const translateY = buttonAnimation.interpolate({ + inputRange: [0, 1], + outputRange: [0, 200] + }) + + return ( + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.black, + }, + roundButton: { + width: 80, + height: 80, + borderRadius: 80, + backgroundColor: colors.red, + }, + text: { + fontSize: ITEM_SIZE * 0.8, + fontFamily: 'Menlo', + color: colors.text, + fontWeight: '900', + } +}); \ No newline at end of file