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
});
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 (
淡入淡出的文本
);
}
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 (
复杂动画示例
);
}
function SpringAnimation() {
const springAnim = new Animated.Value(0);
const startSpring = () => {
Animated.spring(springAnim, {
toValue: 1, // 目标值
friction: 3, // 摩擦力,越小弹性越大
tension: 40, // 张力,越大速度越快
useNativeDriver: true
}).start();
};
return (
弹性动画
);
}
function InterpolateAnimation() {
const animValue = new Animated.Value(0);
// 开始动画
const startAnimation = () => {
Animated.timing(animValue, {
toValue: 1,
duration: 1000,
useNativeDriver: true
}).start();
};
return (
插值动画示例
);
}
这些示例涵盖了 React Native 动画的基础用法。每个动画都可以根据需要进行组合和调整,创建更复杂的动画效果。记住要合理使用 useNativeDriver 来提高动画性能。