详细介绍 React Native 的动画系统。主要包括 Animated 组件的各种用法:
1.基础动画值的创建:
import { Animated, Easing } from 'react-native';
// 创建动画值
const fadeAnim = new Animated.Value(0); // 透明度动画值,初始值为0
const scaleAnim = new Animated.Value(1); // 缩放动画值,初始值为1
const moveAnim = new Animated.ValueXY({ // 位移动画值,初始位置为 {x: 0, y: 0}
x: 0,
y: 0
});
2.基本动画类型:
function AnimationExample() {
// 创建动画值
const [fadeAnim] = useState(new Animated.Value(0));
// 淡入动画
const fadeIn = () => {
Animated.timing(fadeAnim, {
toValue: 1, // 目标值
duration: 1000, // 动画持续时间(毫秒)
easing: Easing.ease, // 缓动函数
useNativeDriver: true // 使用原生动画驱动
}).start(); // 开始动画
};
// 淡出动画
const fadeOut = () => {
Animated.timing(fadeAnim, {
toValue: 0,
duration: 1000,
useNativeDriver: true
}).start();
};
return (
<Animated.View
style={
{
opacity: fadeAnim, // 绑定动画值到样式
}}>
<Text>淡入淡出的文本</Text>
</Animated.View>
);
}
3.复杂动画组合:
function ComplexAnimation() {
// 创建多个动画值
const moveX = new Animated.Value(0);
const moveY = new Animated.Value(0);
const scale = new Animated.Value(1);
// 组合动画
const startComplexAnimation = () => {
// 并行动画:同时执行多个动画
Animated.parallel([
// X轴移动
Animated.timing(moveX, {
toValue: 100,
duration: 1000,
useNativeDriver: true
}),
// Y轴移动
Animated.timing(moveY, {
toValue: 100,
duration: 1000,
useNativeDriver: true
}),
// 缩放
Animated.timing(scale, {
toValue: 2,
duration: 1000,
useNativeDriver: true
})
]).start();
};
// 序列动画:按顺序执行动画
const startSequenceAnimation = () => {
Animated.sequence([
// 先移动
Animated.timing(moveX, {
toValue: 100,
duration: 1000,
useNativeDriver: true
}),
// 再缩放
Animated.timing(scale, {
toValue: 2,
duration: 1000,
useNativeDriver: true
})
]).start();
};
return (
<Animated.View
style={
{
transform: [
{ translateX: moveX },
{ translateY: moveY },
{ scale: scale }
]
}}>
<Text>复杂动画示例</Text>
</Animated.View>
);
}
4.弹性动画:
function SpringAnimation() {
const springAnim = new Animated.Value(0);
const startSpring = () => {
Animated.spring(springAnim, {
toValue: 1, // 目标值
friction: 3, // 摩擦力,越小弹性越大
tension: 40, // 张力,越大速度越快
useNativeDriver: true
}).start();
};
return (
<Animated.View
style={
{
transform: [{
scale: springAnim.interpolate({
inputRange: [0, 1],
outputRange: [1, 2]
})
}]
}}>
<Text>弹性动画</Text>
</Animated.View>
);
}
5.插值动画:
function InterpolateAnimation() {
const animValue = new Animated.Value(0);
// 开始动画
const startAnimation = () => {
Animated.timing(animValue, {
toValue: 1,
duration: 1000,
useNativeDriver: true
}).start();
};
return (
<Animated.View
style={
{
opacity: animValue, // 透明度变化
transform: [{
scale: animValue.interpolate({ // 缩放插值
inputRange: [0, 0.5, 1], // 输入范围
outputRange: [1, 2, 1] // 输出范围
})
}],
backgroundColor: animValue.interpolate({ // 颜色插值
inputRange: [0, 1],
outputRange: ['red', 'blue']
})
}}>
<Text>插值动画示例</Text>
</Animated.View>
);
}
这些示例涵盖了 React Native 动画的基础用法。每个动画都可以根据需要进行组合和调整,创建更复杂的动画效果。记住要合理使用 useNativeDriver 来提高动画性能。