React Native Reanimated 项目教程
2024-09-16 04:25:18作者:傅爽业Veleda
1. 项目介绍
React Native Reanimated 是一个用于 React Native 的高性能动画库,提供了更全面、低级别的抽象,以便在 Animated 库的基础上构建更复杂的动画和手势交互。Reanimated 允许开发者使用纯 JavaScript 定义动画,这些动画默认在 UI 线程上运行,从而实现高达 120 fps 的流畅动画和交互。
主要特点
- 高性能动画:通过在 UI 线程上运行动画,确保动画的流畅性。
- 低级别抽象:提供更灵活的 API,支持复杂的手势交互。
- 纯 JavaScript 定义:开发者可以使用熟悉的 JavaScript 语法定义动画。
2. 项目快速启动
安装
首先,确保你已经安装了 React Native CLI 和 Yarn。然后,通过以下命令安装 React Native Reanimated:
yarn add react-native-reanimated
配置
在 babel.config.js 文件中添加 Reanimated 的 Babel 插件:
module.exports = {
presets: ['module:metro-react-native-babel-preset'],
plugins: ['react-native-reanimated/plugin'],
};
基本使用
以下是一个简单的示例,展示如何使用 Reanimated 创建一个基本的动画:
import React from 'react';
import { View, Button } from 'react-native';
import Animated, { useSharedValue, withSpring } from 'react-native-reanimated';
const App = () => {
const offset = useSharedValue(0);
const handlePress = () => {
offset.value = withSpring(Math.random() * 200);
};
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Animated.View
style={{
width: 100,
height: 100,
backgroundColor: 'blue',
transform: [{ translateX: offset }],
}}
/>
<Button title="Move" onPress={handlePress} />
</View>
);
};
export default App;
3. 应用案例和最佳实践
应用案例
手势动画
Reanimated 非常适合处理复杂的手势动画。例如,你可以创建一个可以拖动的卡片组件:
import React from 'react';
import { View, StyleSheet } from 'react-native';
import Animated, {
useSharedValue,
useAnimatedGestureHandler,
useAnimatedStyle,
withSpring,
} from 'react-native-reanimated';
import { PanGestureHandler } from 'react-native-gesture-handler';
const DraggableCard = () => {
const translateX = useSharedValue(0);
const translateY = useSharedValue(0);
const gestureHandler = useAnimatedGestureHandler({
onStart: (_, ctx) => {
ctx.startX = translateX.value;
ctx.startY = translateY.value;
},
onActive: (event, ctx) => {
translateX.value = ctx.startX + event.translationX;
translateY.value = ctx.startY + event.translationY;
},
onEnd: () => {
translateX.value = withSpring(0);
translateY.value = withSpring(0);
},
});
const animatedStyle = useAnimatedStyle(() => {
return {
transform: [
{ translateX: translateX.value },
{ translateY: translateY.value },
],
};
});
return (
<PanGestureHandler onGestureEvent={gestureHandler}>
<Animated.View style={[styles.card, animatedStyle]} />
</PanGestureHandler>
);
};
const styles = StyleSheet.create({
card: {
width: 100,
height: 100,
backgroundColor: 'red',
borderRadius: 10,
},
});
export default DraggableCard;
最佳实践
- 避免频繁更新:尽量减少动画过程中的频繁更新,以提高性能。
- 使用
useSharedValue:对于需要在多个地方共享的值,使用useSharedValue而不是useState。 - 合理使用
withSpring和withTiming:根据动画的需求选择合适的动画函数。
4. 典型生态项目
React Native Gesture Handler
React Native Gesture Handler 是一个与 Reanimated 紧密结合的手势处理库,提供了更高级的手势识别和处理功能。通过结合使用这两个库,开发者可以轻松实现复杂的手势交互和动画效果。
React Native Skia
React Native Skia 是一个基于 Skia 的图形渲染库,与 Reanimated 结合使用可以实现更复杂的图形动画和视觉效果。
React Native Navigation
React Native Navigation 是一个用于导航管理的库,结合 Reanimated 可以实现流畅的页面切换动画。
通过这些生态项目的结合使用,开发者可以构建出更加丰富和流畅的 React Native 应用。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0597- Ddeepseek-harnessDeepSeek Harness: Everything is a Plugin.TypeScript057
MooncakeMooncake 是面向大模型服务的通信与存储基础设施,致力于让解耦式大模型架构真正能够在真实生产环境中稳定运行、持续扩展、灵活组合,由趋境科技、月之暗面 Kimi 、清华大学 MADSys 实验室、9#AISoft、阿里云、蚂蚁集团等产学研力量共同建设的开源分布式大模型推理架构。C++06
OnnxOCR基于PaddleOCR重构,并且脱离PaddlePaddle深度学习训练框架的轻量级OCR,推理速度超快 —— A lightweight OCR system based on PaddleOCR, decoupled from the PaddlePaddle deep learning training framework, with ultra-fast inference speed.Python01
源启盛夏_AtomGit暑期开发者成长计划「源启盛夏」暑期校园开发者成长计划旨在激活校园开源力量,通过积分激励、认证扶持、资源倾斜等形式,引导高校组织和开发者完成「入驻 — 建项目 — 做贡献 — 获认证 — 得资源」的完整闭环。无论你是想带领社团入驻平台的组织者,还是希望用代码贡献证明自己的开发者,都能在这里找到属于你的成长路径。Markdown01
airi💖🧸 自托管、归你拥有的 Grok 风格 AI 伴侣与 waifu / 赛博生命灵魂容器,目标是接近 Neuro-sama 的高度;支持实时语音聊天、Minecraft 和 Factorio 游玩,支持 Web / macOS / Windows。TypeScript06
热门内容推荐
最新内容推荐
项目优选
收起
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
515
558
暂无描述
Markdown
862
5.73 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.05 K
2.54 K
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
843
1.3 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
858
1.73 K
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.36 K
878
本仓库fork自上游llvm-project仓,面向openEuler社区提供了前端C/C++语言的支持,中端通用优化能力的增强,以及后端多架构的支持,包括AArch64/X86/LoongArch/RISC-V/SW64等。
C++
159
64
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
520
353
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.28 K
1.39 K
deepin linux kernel
C
33
17