当前位置: 首页 > article >正文

鸿蒙原生实战:智感握姿 – 左右手自动适配新闻列表

基于鸿蒙原生手持感知能力实现设备握持姿态实时识别左手持机图片居左、右手持机图片居右配合流畅布局动画打造更贴合单手操作习惯的新闻阅读体验。效果说明请求手持握姿势检测权限授权成功即可识别左右手姿态新闻卡片会根据握持方式自动交换图文位置切换过程平滑无卡顿。核心技术申请权限配置module.json5配置权限:ohos.permission.DETECT_GESTURE动态权限申请手势权限为敏感权限通过abilityAccessCtrl动态申请保证功能可用。握持状态识别使用motion模块监听holdingHandChanged事件获取左手/右手握持状态。响应式状态驱动通过Local声明响应式变量状态变更自动刷新UI布局。容器动画在组件容器上配置非对称动画布局顺序变化时自动执行平滑过渡。实现思路页面初始化时申请ohos.permission.DETECT_GESTURE权限。权限通过后注册握持姿态监听。检测到左手/右手时更新isRightMode状态。状态变化触发新闻卡片非对称动画执行切换图文排列方向离开页面生命周期函数中关闭监听这一点不要忘记哦。真机实测中发现太灵敏偶发手机脱离手放到桌子上也会执行一次可能我手机带着手机壳或者放的时候误触。关键代码说明// 状态变更自动切换布局直接访问this.isRightMode不通过传参BuilderNewsCard(item:NewsItem){Row(){if(this.isRightMode){this.NewsTextColumn(item)this.NewsImage(item)}else{this.NewsImage(item)this.NewsTextColumn(item)}}}运行要求必须真机运行模拟器不支持握持传感器。开启「手势检测」权限。鸿蒙版本6.0、API20完整示例import{motion}fromkit.MultimodalAwarenessKit;import{BusinessError}fromkit.BasicServicesKit;import{promptAction}fromkit.ArkUI;import{abilityAccessCtrl}fromkit.AbilityKit;// 新闻数据模型classNewsItem{id:number;title:string;summary:string;imageColor:Color;constructor(id:number,title:string,summary:string,color:Color){this.idid;this.titletitle;this.summarysummary;this.imageColorcolor;}}Entry ComponentV2 struct Index{Local isRightMode:booleanfalse;Local newsList:NewsItem[][newNewsItem(1,鸿蒙Next正式发布,纯血鸿蒙不再兼容安卓开启移动操作系统新纪元。,Color.Blue),newNewsItem(2,V哥聊技术,深度解析ArkTS语言特性带你弯道超车。,Color.Red),newNewsItem(3,2026行业展望,AI赛道爆发普通程序员如何抓住最后的机会,Color.Green),newNewsItem(4,SpaceX星舰发射,马斯克火星殖民计划又近了一步震撼全人类。,Color.Orange),newNewsItem(5,周末去哪儿玩,发现城市周边的小众露营地放松身心好去处。,Color.Pink),];// 握持状态变化回调privateholdingHandCallback(data:motion.HoldingHandStatus){switch(data){casemotion.HoldingHandStatus.LEFT_HAND_HELD:this.isRightModefalse;break;casemotion.HoldingHandStatus.RIGHT_HAND_HELD:this.isRightModetrue;break;default:break;}};asyncaboutToAppear():Promisevoid{constatManagerabilityAccessCtrl.createAtManager();constcontextthis.getUIContext().getHostContext();try{atManager.requestPermissionsFromUser(context,[ohos.permission.DETECT_GESTURE],(err,data){if(err){console.error(申请失败:${err.message});}else{if(data.authResults[0]abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED){console.info(用户已授权);motion.on(holdingHandChanged,this.holdingHandCallback);promptAction.showToast({message:已开启智能握持适配});console.info(握持状态监听已启动);}else{promptAction.showToast({message:请开启手势检测权限});console.error(权限被拒绝);}}});}catch(err){leterrorerrasBusinessError;console.error(权限申请失败:${error.code},${error.message});}}aboutToDisappear():void{try{motion.off(holdingHandChanged,this.holdingHandCallback);console.info(握持状态监听已关闭);}catch(err){console.error(关闭监听失败);}}// 构建单个新闻卡片带动画BuilderNewsCard(item:NewsItem){Row({space:20}){if(this.isRightMode){// 右手模式文字在左图片在右this.NewsTextColumn(item)this.NewsImage(item)}else{// 左手模式图片在左文字在右this.NewsImage(item)this.NewsTextColumn(item)}}.width(100%).padding(12).margin({bottom:8}).backgroundColor(Color.White).borderRadius(12).shadow({radius:4,color:rgba(0,0,0,0.1),offsetY:2}).animation({duration:300,curve:Curve.EaseInOut})}BuilderNewsTextColumn(item:NewsItem){Column(){Text(item.title).fontSize(16).fontColor(Color.Black).fontWeight(FontWeight.Medium).margin({bottom:8})Text(item.summary).fontSize(14).fontColor(#666666).maxLines(2).textOverflow({overflow:TextOverflow.Ellipsis})}.layoutWeight(1).alignItems(HorizontalAlign.Start).padding({right:12}).transition(TransitionEffect.asymmetric(TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:30})).animation({duration:300,curve:Curve.EaseInOut}),TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:-30})).animation({duration:300,curve:Curve.EaseInOut})))}BuilderNewsImage(item:NewsItem){Row().width(80).height(80).backgroundColor(item.imageColor).borderRadius(8).justifyContent(FlexAlign.Center).transition(TransitionEffect.asymmetric(TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:-30})).animation({duration:300,curve:Curve.EaseInOut}),TransitionEffect.OPACITY.combine(TransitionEffect.translate({x:30})).animation({duration:300,curve:Curve.EaseInOut})))}build(){Column(){// 顶部提示栏Row(){Text(this.isRightMode?右手模式图在右:左手模式图在左).fontSize(14).fontColor(Color.White).padding({left:12,right:12,top:6,bottom:6}).backgroundColor(rgba(0,0,0,0.6)).borderRadius(20)}.width(100%).padding(12).justifyContent(FlexAlign.Center)// 新闻列表List(){ForEach(this.newsList,(item:NewsItem){ListItem(){this.NewsCard(item)}},(item:NewsItem)item.id.toString())}.width(100%).height(100%).padding({left:12,right:12})}.width(100%).height(100%).backgroundColor(#F5F5F5)}}代码下载地址DetectGestureDemo总结本案例很简单通过申请手持检测权限获取能力通过监听手持状态修改状态变量通过非对称动画完成图文左右切换我比较懒就不找图了用不同颜色替代不用的时候记得关闭监听。

相关文章:

鸿蒙原生实战:智感握姿 – 左右手自动适配新闻列表

基于鸿蒙原生手持感知能力,实现设备握持姿态实时识别,左手持机图片居左、右手持机图片居右,配合流畅布局动画,打造更贴合单手操作习惯的新闻阅读体验。 效果说明 请求手持握姿势检测权限,授权成功即可识别左右手姿态…...

会呼吸的防水:如何告别“闷热背包”的尴尬?

传统防水背包常被诟病为“塑料雨衣”——外部雨水进不来,内部汗气出不去。现代防水技术的真正突破,在于实现了“防水”与“透气”的完美平衡。这背后,是一场关于微孔薄膜的智慧博弈。 透气性原理:分子尺度的精妙设计优质防水膜的关…...

异质图对比学习在推荐系统中的实践:从理论到应用

1. 异质图对比学习:推荐系统的新引擎 第一次听说"异质图对比学习"这个词时,我正被公司推荐系统的冷启动问题折磨得焦头烂额。传统协同过滤在新用户面前就像个盲人,而基于内容的推荐又总是陷入"推荐相似商品"的怪圈。直到…...

Binary Ninja:开源二进制逆向工程的Python解决方案

Binary Ninja:开源二进制逆向工程的Python解决方案 【免费下载链接】deprecated-binaryninja-python Deprecated Binary Ninja prototype written in Python 项目地址: https://gitcode.com/gh_mirrors/de/deprecated-binaryninja-python 你是否曾面对一个陌…...

Win11Debloat:如何快速优化Windows 11系统,提升性能与隐私保护

Win11Debloat:如何快速优化Windows 11系统,提升性能与隐私保护 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes …...

B站硬核会员智能答题:AI驱动的高效通关解决方案

B站硬核会员智能答题:AI驱动的高效通关解决方案 【免费下载链接】bili-hardcore bilibili 硬核会员 AI 自动答题脚本,直接调用 B 站 API,非 OCR 实现 项目地址: https://gitcode.com/gh_mirrors/bi/bili-hardcore B站硬核会员身份象征…...

OpenXR Toolkit完全指南:3步让你的VR游戏性能提升50%

OpenXR Toolkit完全指南:3步让你的VR游戏性能提升50% 【免费下载链接】OpenXR-Toolkit A collection of useful features to customize and improve existing OpenXR applications. 项目地址: https://gitcode.com/gh_mirrors/op/OpenXR-Toolkit 想要在不升级…...

373. Java IO API - 文件存储属性

文章目录373. Java IO API - 文件存储属性📏 示例:检查文件存储的空间使用情况⚙️ 解释🔍 确定 MIME 类型📂 示例:获取文件 MIME 类型⚠️ 重要注意事项🛠️ 示例:自定义文件类型探测器&#x…...

Obsidian 完全指南:从入门到精通

一、简介 Obsidian 是一款基于 Markdown 的本地知识管理工具,以双向链接和插件生态著称。 什么是 Obsidian Obsidian 是一款基于本地 Markdown 文件的知识管理和笔记工具。所有笔记以纯文本 .md 文件存储在本地,数据完全由用户掌控,无需依赖云端服务。也可以平替Typora。 …...

OpCore-Simplify:智能配置黑苹果EFI的自动化工具开源方案

OpCore-Simplify:智能配置黑苹果EFI的自动化工具开源方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是一款专为黑苹果…...

告别VIM原生补全:用coc.nvim + Node.js打造媲美VSCode的智能开发环境

告别VIM原生补全:用coc.nvim Node.js打造媲美VSCode的智能开发环境 在编辑器领域,VIM以其高效的键盘操作和强大的定制能力赢得了无数开发者的青睐。然而,对于那些习惯了现代IDE如VSCode、IntelliJ的开发者来说,VIM原生的代码补全…...

用快马AI十分钟打造高保真电商交互原型,验证你的UI-UX-Pro-Max设计

最近在做一个电商项目,需要快速验证产品详情页的交互设计。作为设计师,我一直在寻找能快速把设计稿变成可交互原型的工具。尝试了InsCode(快马)平台后,发现它特别适合做这种高保真原型验证。下面分享下我的具体操作流程和心得: 明…...

5分钟快速部署:GTA5最强免费防护菜单YimMenu终极指南

5分钟快速部署:GTA5最强免费防护菜单YimMenu终极指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…...

三月七小助手:5分钟搞定星穹铁道每日任务,终极自动化工具完全指南

三月七小助手:5分钟搞定星穹铁道每日任务,终极自动化工具完全指南 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 你是否还在为《崩坏&#x…...

MusePublic艺术创作引擎保姆级教程:从安装到生成高清艺术图

MusePublic艺术创作引擎保姆级教程:从安装到生成高清艺术图 1. 准备工作与环境搭建 在开始使用MusePublic艺术创作引擎前,我们需要确保系统环境满足基本要求。这个轻量化的艺术创作工具对硬件配置相对友好,但仍有几个关键点需要注意。 1.1…...

SQL检查开发提效:sql-lint让数据库操作更可靠

SQL检查开发提效:sql-lint让数据库操作更可靠 【免费下载链接】sql-lint An SQL linter 项目地址: https://gitcode.com/gh_mirrors/sq/sql-lint 当你在深夜排查线上SQL错误时,当团队因SQL风格不统一争论时,当执行DELETE语句忘记WHERE…...

【多机器人路径规划】基于MRPP或MAPF的多机器人路径规划算法研究附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。👇 关注我领取海量matlab电子书和数学建模资料🍊个人信条:格物致知,完整Matl…...

面试复盘之WHERE和HAVING的区别以及MySQL的索引

where是在数据分组之前进行过滤执行流程 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY示例 SELECT * FROM employee WHERE salary > 5000;含义:先从表中筛选出 salary > 5000 的记录,再返回结果。 HAVING 关键字 HAVING 的作用…...

基于stm32的通信系统,sim800c与服务器通信,无线通信监测,远程定位,服务器通信系统...

基于stm32的通信系统,sim800c与服务器通信,无线通信监测,远程定位,服务器通信系统,gps,sim800c,心率,温度,stm32 由STM32F103ZET6单片机核心板电路、DS18B20温度传感器电…...

告别暴力搜索!用DiffDock的扩散模型5分钟搞定分子对接,效率提升12倍

5分钟颠覆传统:DiffDock如何用扩散模型重构分子对接效率天花板 在药物研发的漫长链条中,分子对接就像一把精准的钥匙开锁过程——需要找到小分子配体与靶标蛋白最契合的三维结合方式。传统方法如同盲人摸象,耗费数小时在亿万种可能中暴力搜索…...

告别命令行!Auto-py-to-exe可视化打包Python程序的完整指南

1. 为什么需要可视化打包工具? 每次用PyInstaller打包Python程序时,最头疼的就是记不住那一长串命令行参数。上周我帮同事打包一个数据分析工具,光是调试--add-data参数就花了半小时,最后发现是路径写错了斜杠方向。这种经历让我意…...

单电阻采样 基于单电阻采样的相电流重构算法 keil完整工程。 单电阻采样 f103的单电阻...

单电阻采样 基于单电阻采样的相电流重构算法 keil完整工程。 单电阻采样 f103的单电阻,完整工程,带文档,带硬件资料。 f3平台的单电阻完整工程,代码详细注释。 还有微芯的单电阻smo代码加文档 具体如截图请看下一、工程概述 本工程…...

如何突破音频收听限制?打造个人离线音频库的完整方案

如何突破音频收听限制?打造个人离线音频库的完整方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 作为音频爱好者&a…...

零代码玩转华为云DeepSeek:用Witsy打造专属AI客服的完整避坑指南

零代码玩转华为云DeepSeek:用Witsy打造专属AI客服的完整避坑指南 当电商客服每天需要处理上千条重复咨询,当教育机构的课程顾问被基础问题占满工作时间,传统人工服务模式正面临前所未有的效率瓶颈。据行业调研数据显示,接入智能客…...

从视频到标签:一条龙搞定YOLOv5自动标注(附OpenCV抽帧与LabelImg修正全流程)

从视频到标签:YOLOv5自动标注全流程实战指南 当你面对数小时的监控视频或行车记录仪素材,需要快速提取其中的车辆、行人等目标时,手动标注每一帧显然不现实。这套基于YOLOv5的自动标注方案,能帮你将标注效率提升10倍以上。下面我将…...

RTKLIB数据处理避坑大全:从SPP/PPP精度对比到LAPACK库调用疑难解析

RTKLIB数据处理避坑大全:从SPP/PPP精度对比到LAPACK库调用疑难解析 当你在处理GNSS数据时,是否遇到过这样的困扰:明明按照教程一步步操作,结果却出现大量"飞点",精度远不如预期?或者当你想要启用…...

保姆级教程:在Ubuntu服务器上用Docker一键部署华为MindIE,快速搭建LLM私有化API服务

保姆级教程:在Ubuntu服务器上用Docker一键部署华为MindIE,快速搭建LLM私有化API服务 当企业需要将大语言模型(LLM)能力整合到内部系统时,私有化部署成为刚需。华为MindIE作为昇腾AI生态的重要组件,通过容器…...

2025.07.15【甲基化】methylKit实战指南:从Bioconductor安装到差异甲基化区域精准注释

1. methylKit:甲基化数据分析的瑞士军刀 第一次接触甲基化数据分析时,我被各种专业术语和复杂流程搞得晕头转向。直到发现了methylKit这个神器,才真正体会到什么叫"一站式解决方案"。作为R语言环境下最成熟的甲基化分析工具之一&a…...

QueryExcel:5分钟搞定上百个Excel文件的批量查询终极指南

QueryExcel:5分钟搞定上百个Excel文件的批量查询终极指南 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 你是否曾面对数十甚至上百个Excel文件,需要从中查找特定信息&#xff…...

TranslucentTB:重塑Windows任务栏视觉体验的轻量化方案

TranslucentTB:重塑Windows任务栏视觉体验的轻量化方案 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否曾遇到这样的困…...