From 03906a340539136fae715f66e9083da145218dff Mon Sep 17 00:00:00 2001 From: Bro Date: Sun, 16 Aug 2026 16:15:37 +0700 Subject: [PATCH] Kantongku: animasi bar Uangmu Nyawamu (smooth width + shimmer + pulse kritis) --- src/screens/DashboardScreen.tsx | 47 +++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/screens/DashboardScreen.tsx b/src/screens/DashboardScreen.tsx index 7fe701d..ef93ac2 100644 --- a/src/screens/DashboardScreen.tsx +++ b/src/screens/DashboardScreen.tsx @@ -224,6 +224,53 @@ export function DashboardScreen() { } } + // Bar HP: width bergerak halus mengikuti data + useEffect(() => { + Animated.timing(hpAnim, { + toValue: hpPct, + duration: 800, + useNativeDriver: false, + }).start(); + }, [hpPct, hpAnim]); + + // Shimmer: kilau menyapu di atas bar + useEffect(() => { + const loop = Animated.loop( + Animated.timing(shimmerX, { + toValue: 480, + duration: 2200, + useNativeDriver: true, + }) + ); + loop.start(); + return () => loop.stop(); + }, [shimmerX]); + + // Denyut saat kritis + useEffect(() => { + let loop: Animated.CompositeAnimation | null = null; + if (hpPct < 40) { + loop = Animated.loop( + Animated.sequence([ + Animated.timing(pulse, { + toValue: 0.5, + duration: 480, + useNativeDriver: true, + }), + Animated.timing(pulse, { + toValue: 1, + duration: 480, + useNativeDriver: true, + }), + ]) + ); + loop.start(); + } else { + pulse.setValue(1); + } + return () => loop?.stop(); + }, [hpPct, pulse]); + const hasTodayActivity = today.income > 0 || today.expense > 0; const monthNet = monthIncome - monthExpense;