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:
AnimatedAPI: Una API potent i flexible per crear animacions complexes.LayoutAnimationAPI: 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
useRefper crear una referència a un valor animat (Animated.Value). - Configuració de l'animació: Utilitzem
Animated.timingper 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
interpolateper 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
interpolateper 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.configureNextper 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
