鸿蒙ArkTS动画开发全解析:从基础入门到实战精通

news2026/4/28 21:22:37
鸿蒙ArkTS动画开发全解析从基础入门到实战精通在鸿蒙HarmonyOS应用开发中流畅、细腻的动画是提升用户体验的核心要素。ArkTS作为鸿蒙生态的主力开发语言基于TypeScript扩展而来搭配ArkUI框架提供了一套简洁、高效的动画开发体系无需复杂的底层渲染逻辑即可实现丰富的视觉交互效果。本教程将从动画基础认知出发逐步讲解ArkTS动画的核心类型、开发流程、实操案例及性能优化技巧帮助开发者快速掌握ArkTS动画开发打造具备优质交互体验的鸿蒙应用。本教程适用于具备基础ArkTS语法和ArkUI组件开发经验的开发者全程结合实战案例拆解所有代码可直接复制到DevEco Studio中运行调试兼顾理论深度与实操性助力开发者快速上手并灵活运用各类动画效果。一、ArkTS动画核心基础认知1.1 什么是ArkTS动画ArkTS动画是基于ArkUI框架的声明式动画体系依托ArkTS的响应式状态管理和声明式UI特性通过简单的语法配置即可实现组件的位移、缩放、旋转、透明度变化等动画效果。与传统命令式动画相比ArkTS动画无需手动控制动画帧只需定义动画的起始状态、结束状态和过渡属性框架会自动完成动画的插值计算和渲染大幅降低开发成本。ArkTS动画的核心优势的在于“声明式编程”开发者只需描述“动画最终呈现的效果”而非“动画如何执行”结合ArkTS的状态管理机制如State、Link等可实现状态变化与动画效果的无缝联动让动画开发更简洁、高效同时依托ArkCompiler编译器的优化动画运行更流畅稳定。1.2 动画核心概念与依赖环境在开始开发前需先明确ArkTS动画的核心概念及环境要求避免开发过程中出现兼容性问题核心概念状态变量驱动动画的核心如State修饰的变量、动画属性如位移、缩放、旋转等、动画参数时长、曲线、循环次数等、插值器控制动画进度的变化规律环境要求DevEco Studio 4.0及以上版本支持ArkTS 4.0语法、HarmonyOS Next开发者预览版或HarmonyOS 6.0及以上真机/模拟器确保动画API兼容依赖框架ArkUI提供动画核心API、ArkTS提供状态管理和语法支持无需额外引入第三方库原生API即可满足绝大多数动画需求。补充说明ArkTS是TypeScript的超集兼容TypeScript核心语法同时扩展了声明式UI、状态管理等鸿蒙专属能力因此具备TypeScript基础的开发者可快速上手ArkTS动画开发无需从零学习新的语言体系。1.3 动画开发核心原则为确保动画流畅性和用户体验开发过程中需遵循以下3个核心原则轻量优先避免同时执行过多复杂动画优先使用原生动画API减少自定义动画的复杂计算状态联动动画效果与组件状态强绑定通过状态变量的变化触发动画避免手动控制动画生命周期性能适配根据设备性能动态调整动画参数如低性能设备缩短动画时长避免出现卡顿、掉帧现象。二、ArkTS动画核心类型及API详解ArkTS动画主要分为三大类属性动画、转场动画、组合动画各类动画适用场景不同API用法各有侧重下面逐一拆解讲解结合简单示例帮助理解。2.1 属性动画最常用属性动画是ArkTS中最基础、最常用的动画类型通过修改组件的属性值如width、height、opacity、translate等实现组件的动态变化核心API为animation()可直接作用于任意ArkUI组件。2.1.1 核心API参数animation()方法支持多个可选参数用于控制动画的细节常用参数如下重点掌握前5个参数名类型默认值说明durationnumber1000动画时长单位毫秒控制动画执行的快慢temponumber1动画播放速度值越大速度越快与duration配合使用curveCurveCurve.EaseInOut动画曲线控制动画进度的变化规律如加速、减速、匀速delaynumber0动画延迟执行时间单位毫秒iterationsnumber1动画播放次数-1表示无限循环playModePlayModePlayMode.Normal播放模式如Normal正常循环、Alternate正向反向交替onFinish() voidnull动画结束后的回调函数iterations为-1时不触发2.1.2 常用动画曲线Curve动画曲线决定了动画的“运动质感”不同场景适合不同的曲线常用曲线如下Curve.Linear匀速运动适用于匀速位移、匀速缩放等场景Curve.EaseIn加速运动适用于物体下落、弹出等场景Curve.EaseOut减速运动适用于物体上升、收起等场景Curve.EaseInOut先加速后减速适用于大多数基础动画如按钮点击、组件浮现Curve.FastOutLinearIn快速加速后匀速适用于向上运动的减速效果Curve.LinearOutSlowIn匀速后快速减速适用于下落运动的加速效果。2.1.3 基础示例按钮点击缩放动画下面通过一个简单示例演示属性动画的基本用法点击按钮时按钮实现缩放效果松开后恢复原状结合State状态变量驱动动画。// 导入必要的ArkUI组件 import { Button, Column, Text, State } from ohos/ui; Component struct ScaleAnimationDemo { // 定义状态变量控制按钮缩放比例初始值为1原始大小 State scale: number 1; build() { Column({ space: 20, alignItems: center, justifyContent: center }) { // 按钮组件添加缩放动画 Button(点击触发缩放动画) .width(200) .height(60) .fontSize(16) // 绑定缩放属性scale为状态变量 .scale({ x: this.scale, y: this.scale }) // 配置动画参数 .animation({ duration: 300, // 动画时长300毫秒 curve: Curve.EaseInOut, // 先加速后减速 iterations: 1, // 播放1次 onFinish: () { // 动画结束后将缩放比例恢复为1 this.scale 1; } }) // 点击事件触发动画修改状态变量 .onClick(() { this.scale 0.9; // 点击时缩小到0.9倍 }) Text(点击按钮查看动画效果) .fontSize(14) .color(#666666) } .width(100%) .height(100%) } } // 入口组件 Entry Component struct AnimationTutorial { build() { ScaleAnimationDemo(); } }代码解析通过State修饰的scale变量控制按钮的缩放比例点击按钮时修改scale的值为0.9由于scale绑定了按钮的scale属性且配置了animation()方法框架会自动执行“从1到0.9”的缩放动画动画结束后通过onFinish回调将scale恢复为1实现“点击缩小、松开恢复”的效果。2.2 转场动画转场动画主要用于组件的“出现”和“消失”场景如页面跳转、弹窗显示/隐藏核心API为transition()可设置组件进入、退出时的动画效果常用场景包括页面切换、弹窗弹出、列表项添加/删除等。2.2.1 核心API参数transition()方法的核心参数为TransitionOptions常用配置如下type转场类型可选值为TransitionType.Insert进入、TransitionType.Delete退出、TransitionType.All进入退出opacity透明度变化如{ opacity: 0 }表示从透明变为不透明translate位移变化如{ x: 100 }表示从x轴100px位置移动到当前位置scale缩放变化如{ x: 0, y: 0 }表示从缩小到0变为原始大小rotate旋转变化如{ angle: 90 }表示从旋转90度变为0度duration、curve、delay与属性动画的参数用法一致控制转场动画的细节。2.2.2 基础示例弹窗显示/隐藏转场动画下面实现一个弹窗组件显示时从底部滑入并淡入隐藏时从底部滑出并淡出结合State变量控制弹窗的显示状态。import { Button, Column, Text, State, Row, Modal, TransitionType } from ohos/ui; Component struct TransitionAnimationDemo { // 控制弹窗显示/隐藏的状态变量 State isShow: boolean false; build() { Column({ space: 20, alignItems: center, justifyContent: center }) { Button(显示弹窗) .width(200) .height(60) .onClick(() { this.isShow true; // 显示弹窗 }) // 弹窗组件添加转场动画 if (this.isShow) { Column({ space: 15, alignItems: center, justifyContent: center }) .width(80%) .height(200) .backgroundColor(#ffffff) .borderRadius(12) .shadow({ radius: 10, color: #00000020 }) // 转场动画配置进入和退出时的效果 .transition({ type: TransitionType.All, // 同时配置进入和退出动画 translate: { y: 100 }, // 位移从底部100px位置进入/退出 opacity: 0, // 透明度从透明变为不透明进入从不透明变为透明退出 duration: 300, curve: Curve.EaseInOut }) .animation() // 启用转场动画必须添加否则转场不生效 .onClick(() { this.isShow false; // 点击弹窗隐藏 }) { Text(弹窗标题) .fontSize(18) .fontWeight(bold) Text(这是一个带转场动画的弹窗) .fontSize(14) .color(#666666) } } } .width(100%) .height(100%) .backgroundColor(#f5f5f5) } } Entry Component struct AnimationTutorial { build() { TransitionAnimationDemo(); } }代码解析通过if条件判断控制弹窗的显示/隐藏当isShow从false变为true时弹窗执行“从底部100px、透明”到“当前位置、不透明”的进入动画当isShow从true变为false时执行相反的退出动画。注意转场动画必须配合animation()方法启用否则无法生效。2.3 组合动画组合动画是将多个属性动画、转场动画结合起来实现更复杂的动画效果如“位移旋转缩放”同时进行。ArkTS中实现组合动画有两种方式一是给同一个组件绑定多个动画属性二是使用animateTo()方法包裹多个状态变量的修改实现多属性同步动画。2.3.1 核心方法animateTo()animateTo()是实现组合动画的核心方法可包裹多个状态变量的修改框架会自动将所有状态变化对应的动画同步执行语法如下animateTo({ duration: 500, curve: Curve.EaseInOut }, () { // 此处修改多个状态变量对应的动画会同步执行 this.x 100; this.y 100; this.scale 1.2; this.opacity 0.8; })2.3.2 实战示例跳动的爱心动画多属性组合下面实现一个经典的组合动画案例跳动并旋转的爱心结合Canvas绘制爱心搭配位移、旋转、缩放动画还原真实的跳动效果同时添加影子动画增强立体感。import { Component, State, Canvas, CanvasGradient, Curve, PlayMode } from ohos/ui; // 自定义爱心组件 Component struct HeartComponent { // 爱心位置、大小、旋转角度状态变量 State top: number 200; State size: number 100; State rotateAngle: number 0; // 影子大小状态变量配合爱心跳动 State shadowSize: number 30; build() { Column({ alignItems: center }) { // 影子组件跟随爱心跳动变化大小和透明度 Column() .width(this.shadowSize) .height(10) .backgroundColor(#00000020) .borderRadius(5) .blur(5) // 模糊效果增强影子真实感 .animation({ duration: 800, curve: Curve.Linear, iterations: -1, playMode: PlayMode.Alternate }) // Canvas绘制爱心 Canvas() .width(this.size) .height(this.size) .top(this.top) .rotate({ angle: this.rotateAngle }) .animation({ duration: 800, curve: this.top 200 ? Curve.FastOutLinearIn : Curve.LinearOutSlowIn, iterations: -1, playMode: PlayMode.Alternate, onFinish: () { // 每次动画结束旋转角度增加90度 this.rotateAngle 90; } }) .onDraw((context) { // 初始化画布 context.clearRect(0, 0, this.size, this.size); // 创建线性渐变让爱心更立体 const gradient: CanvasGradient context.createLinearGradient(0, 0, this.size, this.size); gradient.addColorStop(0, #ff4d6d); // 渐变起始色 gradient.addColorStop(1, #ff758f); // 渐变结束色 context.fillStyle gradient; // 绘制爱心两条贝塞尔曲线组成 context.beginPath(); context.moveTo(this.size / 2, this.size / 4); // 左侧贝塞尔曲线 context.bezierCurveTo( 0, 0, 0, this.size / 2, this.size / 2, this.size * 3 / 4 ); // 右侧贝塞尔曲线 context.bezierCurveTo( this.size, this.size / 2, this.size, 0, this.size / 2, this.size / 4 ); context.closePath(); context.fill(); // 填充爱心 }) } .width(100%) .height(100%) .onAppear(() { // 组件渲染完成后启动跳动动画 setInterval(() { if (this.top 200) { this.top 150; this.size 110; this.shadowSize 20; } else { this.top 200; this.size 100; this.shadowSize 30; } }, 800); }) } } // 入口组件 Entry Component struct HeartAnimationDemo { build() { Column({ alignItems: center, justifyContent: center }) { HeartComponent(); Text(跳动的爱心动画组合动画示例) .fontSize(16) .marginTop(20) } .width(100%) .height(100%) .backgroundColor(#fafafa) } }代码解析该案例结合了多个动画效果属于典型的组合动画① 爱心的位移动画top从200到150模拟跳动效果② 缩放动画size从100到110增强跳动的立体感③ 旋转动画rotateAngle每次增加90度让爱心旋转④ 影子动画shadowSize跟随爱心跳动变化提升真实感。同时通过Canvas绘制爱心并添加线性渐变让爱心更美观动画曲线根据跳动方向调整上升减速、下落加速还原真实的重力效果。三、ArkTS动画实战进阶复杂场景应用掌握基础动画后下面结合两个高频实战场景讲解ArkTS动画的进阶用法涵盖列表动画、页面切换动画帮助开发者应对实际开发中的复杂需求。3.1 场景一列表项添加/删除动画在鸿蒙应用中列表是常用组件给列表项添加“添加/删除”转场动画可提升用户交互体验。下面实现一个可添加、删除项的列表列表项添加时淡入上移删除时淡出下移。import { Component, State, List, ListItem, Button, Text, Input, TransitionType, Curve } from ohos/ui; Component struct ListAnimationDemo { // 列表数据 State listData: string[] [列表项1, 列表项2, 列表项3]; // 输入框内容 State inputValue: string ; build() { Column({ space: 20 }) { // 输入框和添加按钮 Row({ space: 10, alignItems: center }) { Input({ value: this.inputValue, placeholder: 请输入列表项 }) .width(70%) .height(50) .onChange((value) { this.inputValue value; }) Button(添加) .width(20%) .height(50) .onClick(() { if (this.inputValue) { // 添加列表项插入到第一个位置 this.listData.unshift(this.inputValue); this.inputValue ; } }) } .padding(20) // 列表组件添加列表项转场动画 List({ space: 10 }) { ForEach(this.listData, (item, index) { ListItem() { Row({ space: 10, alignItems: center, justifyContent: space-between }) .width(100%) .height(60) .backgroundColor(#ffffff) .padding(20) .borderRadius(8) // 列表项转场动画 .transition({ type: TransitionType.All, opacity: 0, translate: { y: 20 }, // 从下方20px位置进入/退出 duration: 300, curve: Curve.EaseInOut }) .animation() { Text(item) .fontSize(16) Button(删除) .width(80) .height(40) .backgroundColor(#ff4d4f) .color(#ffffff) .onClick(() { // 删除当前列表项 this.listData.splice(index, 1); }) } } }) } .width(100%) .flexGrow(1) .padding(20) } .width(100%) .height(100%) .backgroundColor(#f5f5f5) } } Entry Component struct AnimationTutorial { build() { ListAnimationDemo(); } }代码解析通过ForEach循环渲染列表项给每个列表项添加转场动画当列表项被添加unshift时执行“透明、下方20px”到“不透明、当前位置”的进入动画当列表项被删除splice时执行相反的退出动画。同时结合输入框和按钮实现列表项的添加和删除动画与数据状态无缝联动交互流畅自然。3.2 场景二页面切换动画页面切换是鸿蒙应用的常见场景默认页面切换无动画通过转场动画可提升页面切换的流畅性和视觉体验。下面实现两个页面切换时实现“左滑进入、右滑退出”的动画效果。import { Component, State, Navigator, Page, Text, Button, TransitionType, Curve } from ohos/ui; // 页面1 Component struct Page1 { build() { Page() { Column({ alignItems: center, justifyContent: center, space: 20 }) .width(100%) .height(100%) .backgroundColor(#e6f7ff) { Text(页面1) .fontSize(24) .fontWeight(bold) // 跳转到页面2 Navigator({ target: Page2, type: push }) { Button(跳转到页面2) .width(200) .height(60) .backgroundColor(#1890ff) .color(#ffffff) } // 页面切换转场动画退出时右滑 .transition({ type: TransitionType.Delete, translate: { x: -300 }, opacity: 0, duration: 300, curve: Curve.EaseInOut }) } } } } // 页面2 Component struct Page2 { build() { Page() { Column({ alignItems: center, justifyContent: center, space: 20 }) .width(100%) .height(100%) .backgroundColor(#fff7e6) { Text(页面2) .fontSize(24) .fontWeight(bold) // 返回到页面1 Navigator({ target: Page1, type: pop }) { Button(返回页面1) .width(200) .height(60) .backgroundColor(#faad14) .color(#ffffff) } // 页面切换转场动画进入时左滑 .transition({ type: TransitionType.Insert, translate: { x: 300 }, opacity: 0, duration: 300, curve: Curve.EaseInOut }) } } } } // 入口组件 Entry Component struct PageTransitionDemo { build() { Page1(); } }代码解析通过Navigator组件实现页面跳转给两个页面分别添加转场动画页面1退出时跳转到页面2执行“向左位移300px透明”的退出动画页面2进入时执行“从右侧300px位置向左移动透明变不透明”的进入动画返回时则执行相反的动画实现类似原生应用的页面切换效果。四、ArkTS动画性能优化技巧动画的流畅性直接影响用户体验尤其是在复杂场景如多动画同时执行、列表滚动时的动画中需做好性能优化避免出现卡顿、掉帧现象。结合鸿蒙ArkUI的渲染机制总结以下4个核心优化技巧4.1 优先使用硬件加速属性ArkUI框架对部分动画属性支持硬件加速优先使用这些属性可提升动画流畅度避免使用CPU密集型属性推荐使用translate位移、scale缩放、rotate旋转、opacity透明度这些属性可通过GPU加速渲染性能消耗低避免使用width、height、margin、padding等布局相关属性这些属性会触发组件重新布局layoutCPU消耗高容易导致卡顿。4.2 合理控制动画时长和帧率动画时长过长会导致用户等待过短则会让用户感觉突兀同时需控制帧率避免不必要的性能消耗基础动画如按钮点击、组件浮现时长控制在200-300ms兼顾流畅性和体验复杂组合动画如页面切换、弹窗时长控制在300-500ms避免过长导致卡顿避免过高帧率鸿蒙应用默认动画帧率为60fps无需手动设置过高帧率会增加GPU负担反而导致掉帧。4.3 避免过度动画和无效动画过度使用动画会分散用户注意力同时增加性能消耗需遵循“必要才用”的原则避免给无关组件添加动画只给用户交互相关的组件如按钮、弹窗、列表项添加动画避免同时执行多个复杂动画如同时执行5个以上组合动画会导致GPU负载过高出现掉帧组件不可见时停止动画如页面切换后隐藏页面的动画需停止避免无效的性能消耗。4.4 利用缓存和懒加载优化对于列表动画、动态加载的组件动画可通过缓存和懒加载减少渲染压力列表动画使用LazyForEach替代ForEach实现列表项懒加载避免一次性渲染所有列表项同时配合cachedCount设置缓存数量减少频繁渲染组件缓存对于频繁切换显示/隐藏的组件可使用Reusable装饰器实现组件复用避免每次显示时重新创建组件减少渲染成本。五、常见问题与解决方案在ArkTS动画开发过程中开发者常会遇到一些问题下面总结4个高频问题及解决方案帮助快速排查问题问题1动画不生效原因及解决方案未使用状态变量驱动动画动画必须通过State、Link等状态变量的变化触发直接修改组件属性不会触发动画转场动画未添加animation()方法转场动画需配合animation()方法启用否则无法生效动画参数设置错误如duration设为0、iterations设为0或curve设置错误需检查动画参数配置。问题2动画卡顿、掉帧原因及解决方案使用了CPU密集型属性替换为translate、scale等硬件加速属性同时执行过多动画减少动画数量避免复杂组合动画同时执行设备性能不足针对低性能设备动态缩短动画时长、简化动画效果。问题3动画结束后组件状态异常原因及解决方案未在onFinish回调中恢复状态如缩放动画结束后未将scale恢复为原始值需在onFinish中重置状态变量动画参数设置错误如playMode设为Alternate导致动画结束后状态异常需根据需求调整playMode。问题4多动画不同步原因及解决方案未使用animateTo()方法多个状态变量的修改需包裹在animateTo()中确保动画同步执行动画参数不一致多个动画的duration、curve需设置一致否则会出现不同步现象。六、总结与拓展本教程全面讲解了ArkTS动画的核心知识从基础属性动画、转场动画到组合动画结合多个实战案例覆盖了鸿蒙应用开发中常见的动画场景同时分享了性能优化技巧和常见问题解决方案帮助开发者快速上手ArkTS动画开发。ArkTS动画的核心是“声明式状态联动”无需关注底层渲染细节只需通过状态变量的变化驱动动画即可实现丰富的视觉效果。随着HarmonyOS的不断升级ArkTS动画API也在持续完善新增了更多复杂动画能力如3D动画、路径动画开发者可在掌握基础动画后进一步学习鸿蒙官方文档探索更多高级动画用法。建议开发者多动手实操结合实际项目需求灵活运用各类动画效果在提升应用交互体验的同时兼顾动画性能打造出更优质的鸿蒙应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2548180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…