Les animacions són una part essencial de qualsevol aplicació mòbil moderna, ja que milloren l'experiència de l'usuari fent que la interfície sigui més atractiva i interactiva. En aquest tema, aprendrem com crear animacions a React Native utilitzant l'API d'Animació de React Native.
Continguts
Introducció a les animacions
React Native proporciona dues maneres principals de crear animacions:
Animated
API: Una API potent i flexible per crear animacions complexes.LayoutAnimation
API: Una API més senzilla per animar canvis de disseny.
Animacions bàsiques amb Animated
L'API Animated
és molt flexible i permet crear animacions complexes. A continuació, veurem un exemple bàsic d'animació utilitzant Animated
.
Exemple: Animació de translació
import React, { useRef, useEffect } from 'react'; import { Animated, View, Button, StyleSheet } from 'react-native'; const BasicAnimation = () => { const translation = useRef(new Animated.Value(0)).current; const startAnimation = () => { Animated.timing(translation, { toValue: 300, duration: 1000, useNativeDriver: true, }).start(); }; return ( <View style={styles.container}> <Animated.View style={[styles.box, { transform: [{ translateY: translation }] }]} /> <Button title="Start Animation" onPress={startAnimation} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, box: { width: 100, height: 100, backgroundColor: 'blue', }, }); export default BasicAnimation;
Explicació del codi
- Creació de l'animació: Utilitzem
useRef
per crear una referència a un valor animat (Animated.Value
). - Configuració de l'animació: Utilitzem
Animated.timing
per definir una animació de translació vertical (translateY
). - Inici de l'animació: Quan es prem el botó, l'animació comença i la caixa es mou cap avall.
Interpolació
L'interpolació permet mapar un rang de valors d'entrada a un rang de valors de sortida. Això és útil per crear animacions més complexes.
Exemple: Interpolació de translació i opacitat
import React, { useRef, useEffect } from 'react'; import { Animated, View, Button, StyleSheet } from 'react-native'; const InterpolationAnimation = () => { const animation = useRef(new Animated.Value(0)).current; const startAnimation = () => { Animated.timing(animation, { toValue: 1, duration: 1000, useNativeDriver: true, }).start(); }; const translateY = animation.interpolate({ inputRange: [0, 1], outputRange: [0, 300], }); const opacity = animation.interpolate({ inputRange: [0, 1], outputRange: [1, 0], }); return ( <View style={styles.container}> <Animated.View style={[styles.box, { transform: [{ translateY }], opacity }]} /> <Button title="Start Animation" onPress={startAnimation} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, box: { width: 100, height: 100, backgroundColor: 'blue', }, }); export default InterpolationAnimation;
Explicació del codi
- Interpolació de translació: Utilitzem
interpolate
per mapar el valor d'animació de 0 a 1 a un rang de 0 a 300 per a la translació vertical. - Interpolació d'opacitat: Utilitzem
interpolate
per mapar el valor d'animació de 0 a 1 a un rang de 1 a 0 per a l'opacitat.
Animacions seqüencials i paral·leles
Podem combinar múltiples animacions utilitzant Animated.sequence
i Animated.parallel
.
Exemple: Animacions seqüencials
const startSequentialAnimation = () => { Animated.sequence([ Animated.timing(translation, { toValue: 300, duration: 1000, useNativeDriver: true, }), Animated.timing(opacity, { toValue: 0, duration: 500, useNativeDriver: true, }), ]).start(); };
Exemple: Animacions paral·leles
const startParallelAnimation = () => { Animated.parallel([ Animated.timing(translation, { toValue: 300, duration: 1000, useNativeDriver: true, }), Animated.timing(opacity, { toValue: 0, duration: 1000, useNativeDriver: true, }), ]).start(); };
Animacions amb LayoutAnimation
LayoutAnimation
és una API més senzilla per animar canvis de disseny, com ara l'addició o eliminació de components.
Exemple: Animació de canvis de disseny
import React, { useState } from 'react'; import { View, Button, LayoutAnimation, StyleSheet } from 'react-native'; const LayoutAnimationExample = () => { const [expanded, setExpanded] = useState(false); const toggleExpand = () => { LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut); setExpanded(!expanded); }; return ( <View style={styles.container}> <View style={[styles.box, expanded && styles.expandedBox]} /> <Button title="Toggle Expand" onPress={toggleExpand} /> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, box: { width: 100, height: 100, backgroundColor: 'blue', }, expandedBox: { width: 200, height: 200, }, }); export default LayoutAnimationExample;
Explicació del codi
- Configuració de l'animació: Utilitzem
LayoutAnimation.configureNext
per configurar l'animació de disseny. - Canvi de disseny: Quan es prem el botó, la caixa canvia de mida amb una animació suau.
Exercicis pràctics
Exercici 1: Animació de rotació
Crea una animació que faci girar una vista 360 graus.
Exercici 2: Animació de color
Crea una animació que canviï el color de fons d'una vista de blau a vermell.
Solucions
Solució 1: Animació de rotació
Solució 2: Animació de color
const backgroundColor = animation.interpolate({ inputRange: [0, 1], outputRange: ['blue', 'red'], });
Conclusió
En aquest tema, hem après com crear animacions a React Native utilitzant l'API Animated
i LayoutAnimation
. Hem vist exemples pràctics d'animacions bàsiques, interpolació, animacions seqüencials i paral·leles, i animacions de disseny. Les animacions són una eina poderosa per millorar l'experiència de l'usuari i fer que les aplicacions siguin més atractives i interactives. Practica amb els exercicis proporcionats per consolidar els teus coneixements i explorar més possibilitats amb les animacions a React Native.
Curs de React Native
Mòdul 1: Introducció a React Native
- Què és React Native?
- Configuració de l'entorn de desenvolupament
- Aplicació Hello World
- Comprendre JSX
- Components i Props
Mòdul 2: Components bàsics i estilització
- Visió general dels components bàsics
- Text, View i Image
- Estilització amb Flexbox
- Gestió de l'entrada de l'usuari
- ScrollView i ListView
Mòdul 3: Estat i cicle de vida
- Mètodes d'estat i cicle de vida
- Gestió d'esdeveniments
- Renderització condicional
- Llistes i claus
- Formularis i components controlats
Mòdul 4: Navegació
- Introducció a React Navigation
- Stack Navigator
- Tab Navigator
- Drawer Navigator
- Passar paràmetres a les rutes
Mòdul 5: Xarxes i dades
- Obtenir dades amb Fetch API
- Utilitzar Axios per a sol·licituds HTTP
- Gestió d'errors de xarxa
- AsyncStorage per a dades locals
- Integració amb APIs REST
Mòdul 6: Conceptes avançats
Mòdul 7: Desplegament i publicació
- Construcció per a iOS
- Construcció per a Android
- Publicació a l'App Store
- Publicació a Google Play
- Integració i lliurament continus