Harmony os 技术实战|拼豆制图31:用嵌套 Scroll 驾驭 70×70 编号大图
一张 70×70 拼豆图只有 4900 个格子但每格放大到 11vp 并写入色号后纸面宽度会来到 804vp内容高度也超过普通手机的一屏。直接缩小能把全图塞进去却会让A12、F16这类三位色号失去可读性只做纵向滚动又看不到右侧列用一个Scroll同时期待横向和纵向拖动手势与内容约束也很难解释。本篇围绕拼豆制图的ExpandedChartPage()拆解一种稳定的二维浏览方式外层只负责横向内层只负责纵向纸张持有明确宽度页面状态负责进入与退出。重点不是“套两个滚动容器”而是让尺寸、方向、生命周期和交互提示形成同一份契约。一、先算清楚为什么不能继续压缩展开态的格子尺寸由expandedCellSize()决定。宽度达到 64 时每格取 11vpprivateexpandedCellSize(pattern:Pattern):number{if(pattern.width64){return11;}if(pattern.width48){return12;}return14;}privateexpandedPaperWidth(pattern:Pattern):number{return34pattern.width*this.expandedCellSize(pattern);}对 70 列图纸结果为纸面宽度 34 70 × 11 804vp 格子主体高度 70 × 11 770vp 上下坐标栏 16 × 2 32vp 底部留白 14vp360vp 手机屏幕即使扣除左右边距后只有三百多 vp804vp 的纸面不可能原尺寸完整展示。这里的正确目标不是“让内容不溢出”而是“保持格子可读并允许用户抵达任何一个坐标”。二、把二维问题拆成两个单轴容器页面使用外横内纵的结构Scroll(){Scroll(){Column({space:0}){this.ChartHeader(pattern.width,this.expandedCellSize(pattern));// 70 行格子this.ChartHeader(pattern.width,this.expandedCellSize(pattern));}.width(this.expandedPaperWidth(pattern))}.width(this.expandedPaperWidth(pattern)).height(100%).scrollable(ScrollDirection.Vertical).scrollBar(BarState.Auto)}.layoutWeight(1).width(100%).scrollable(ScrollDirection.Horizontal).scrollBar(BarState.Auto)这段结构有三条关键约束外层视口宽度是100%内容宽度可以超过视口所以横向有可滚动距离。内层高度是100%纸面实际高度超过视口所以纵向有可滚动距离。两层scrollable()方向互斥横向位移不需要和纵向位移争夺同一个轴。三、纸张必须有确定宽度不能只依赖子节点撑开二维滚动最常见的空白故障是外层知道自己只有一屏宽却不知道内部纸张到底有多宽。格子虽然逐个设置了宽度布局测量阶段仍可能因为父级约束而压缩或裁切。拼豆制图同时给Column和内层纵向Scroll设置纸宽Column({space:0}){// 坐标与格子}.padding({right:14,bottom:14}).width(this.expandedPaperWidth(pattern))Scroll(){// 上述 Column}.width(this.expandedPaperWidth(pattern))这不是无意义的重复。前者规定纸张布局盒后者规定纵向滚动内容盒外层横向容器据此得到 804vp 的真实内容范围。若只留下width(100%)横向滚动条可能出现但无法抵达第 70 列。建议把计算结果集中为只读几何对象避免多个位置重复算式interfaceExpandedGeometry{cell:number;paperWidth:number;}functionexpandedGeometry(pattern:Pattern):ExpandedGeometry{constcellpattern.width64?11:pattern.width48?12:14;return{cell,paperWidth:34pattern.width*cell};}四、纵向容器为何放在横向容器里面如果结构反过来外层纵向、内层横向也能工作但编号图纸有一个实际偏好页面顶部标题和退出按钮应固定只有下方纸张区域参与拖动。外层横向容器占据剩余高度内部纵向容器把整张纸当作横向内容这样顶部栏不跟随任一轴移动。页面层级可以概括为ExpandedChartPage全屏 ├─ Header固定 ├─ 操作提示固定 └─ Horizontal Scroll剩余空间 └─ Vertical Scroll804vp 宽 └─ Chart Paper坐标栏 70 行 坐标栏若把整个页面包进纵向滚动用户向下查看第 60 行时标题也会离开视口退出入口变得难找固定头部能让大图浏览更像一个专用工作台。五、展开态应是页面状态不是另一个导航目标当前实现用isChartExpanded控制全屏分支if(this.activeTabnumberedthis.isChartExpanded){this.ExpandedChartPage(this.getSelectedPattern());}else{// 常规页面}if(!this.isChartExpanded){this.BottomNavigation();}点击缩略纸面进入展开态左上角返回和右上角关闭都把状态恢复为false。这种做法保留了当前图案、收藏状态和编号页上下文不需要额外传递路由参数。但它也带来一个必须明确的恢复规则只要离开numbered页就应保证展开态不会在下次进入时意外复现。可在切换底部标签时统一收口privateswitchTab(next:string):void{if(next!numbered){this.isChartExpandedfalse;}this.activeTabnext;}六、格子 Key 要在展开树中保持唯一普通纸面和展开纸面都使用同一批chartCells。展开树为 Key 加前缀ForEach(row,(cell:BeadCell){this.ChartCell(cell,this.expandedCellSize(pattern),true);},(cell:BeadCell)expanded-${cell.id})行 Key 同样使用expanded-row-。这样做能清楚表达“这是另一棵渲染树里的同一业务格子”也避免未来把缩略态和展开态放进同一个父容器时出现 Key 冲突。稳定 Key 不应包含当前滚动偏移或数组索引重排结果。格子 ID 已由row-col构成图案不变时就保持稳定横向或纵向滚动只改变可见区域不改变节点身份。七、滚动条、提示语和粗网格共同降低迷失感二维拖动的难点不止是实现还包括方向感。页面保留三种提示文案“拖动查看完整图纸”告诉用户内容可以移动。两个轴都使用BarState.Auto发生滚动时显示当前位置。ChartCell()每隔 8 行或 8 列画一条重线为大图提供局部参照。.border({width:(cell.row%80||cell.col%80)?1:0.5,color:(cell.row%80||cell.col%80)?ThemeTokens.gridHeavy:ThemeTokens.grid})还可以进一步增加固定角标例如显示“行 33—58 / 列 12—40”但这需要监听两个轴的偏移并换算可见范围。若没有可靠偏移数据宁可保留坐标栏和自动滚动条也不要显示可能错误的范围。八、性能边界4900 个节点不是无限画布当前展开页一次创建 4900 个Text节点。对固定 70×70 图纸这种实现直观且便于逐格显示色号但若尺寸扩展到 140×140节点数会变成 19600布局、测量和内存压力都会显著增加。可按规模分层≤ 70×70ArkUI 节点网格交互简单色号易读 70×70 120×120分块渲染只挂载附近区块 更大尺寸Canvas/PixelMap 绘制按视口缩放与平移分块时不要按单格虚拟化而应按 8×8 或 10×10 区块组织。这样粗网格、坐标换算和局部更新都有自然边界也能减少频繁创建小节点的开销。九、验收要沿两个轴走到尽头大图页面不能只看“能拖动”。建议至少执行以下步骤从编号页点击纸面确认底部导航隐藏、顶部退出入口仍可见。横向拖到最右确认第 70 列和右侧留白能完整出现。纵向拖到最下确认第 70 行、底部坐标栏和底部留白可见。在右下角连续做斜向手势确认两个轴都能继续响应。退出后重新进入确认选中的图案没有变化。在 48、64 两个宽度边界各放一张样本核对格子尺寸切换。若出现“只能横移不能下移”先查看内层是否拥有受限高度若“能下移但右侧永远缺几列”优先核对纸张与内层容器是否都使用expandedPaperWidth()若斜向拖动抖动则检查两层方向是否写反或某层仍保留默认方向。十、结语70×70 编号图的核心矛盾是“完整”和“可读”不能同时塞进一屏。拼豆制图用 804vp 的明确纸宽保住色号用外横内纵的两个单轴Scroll提供二维抵达能力再用固定头部、自动滚动条、稳定 Key 和粗网格维持方向感。这套结构适合固定规模的施工图、像素图、表格预览和地图切片。真正可靠的判断标准不是容器数量而是每一层是否只有一个清晰职责页面控制模式外层控制横向视口内层控制纵向视口纸张只负责按确定几何渲染内容。

相关新闻

Python实战:构建自动化市场复盘分析系统,从数据到决策

Python实战:构建自动化市场复盘分析系统,从数据到决策

最近在复盘市场数据时,发现很多朋友对如何系统性地分析每日市场行情、解读关键指标感到困惑。网上的信息要么过于零散,要么充斥着情绪化的解读,缺乏一套清晰、可复用的分析框架。本文将基于一个具体的交易日(2026年7月31日&#x…

2026/8/22 11:32:24 阅读更多 →
从零构建开源3D家居编辑器:Three.js核心架构与工程实践详解

从零构建开源3D家居编辑器:Three.js核心架构与工程实践详解

最近在B站AI创造公开赛上,一个名为“手搓大型3D家居编辑器”的开源项目吸引了大量开发者和技术爱好者的目光。对于许多前端和图形学开发者而言,3D编辑器项目往往意味着复杂的数学计算、庞大的引擎依赖和陡峭的学习曲线,而这个项目却选择了一条…

2026/8/22 11:30:00 阅读更多 →
C++开发必备:c++filt命令详解与实战应用

C++开发必备:c++filt命令详解与实战应用

在实际 C 项目开发或调试过程中,尤其是在分析崩溃堆栈、阅读编译器生成的汇编代码或使用 nm 、 objdump 等工具查看符号表时,你经常会遇到一些难以理解的“乱码”符号,例如 _ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_s…

2026/8/22 12:38:11 阅读更多 →

最新新闻

如何让AI联网搜索:ChatPilot Google搜索工具(Serper/DuckDuckGo)配置实战

如何让AI联网搜索:ChatPilot Google搜索工具(Serper/DuckDuckGo)配置实战

如何让AI联网搜索:ChatPilot Google搜索工具(Serper/DuckDuckGo)配置实战 【免费下载链接】ChatPilot ChatPilot: Chat Agent Web UI,实现Chat对话前端,支持Google搜索、文件网址对话(RAG)、代码…

2026/8/22 14:45:08 阅读更多 →
手机也能跑 Forge——HMCL-PE 启动器上手实测

手机也能跑 Forge——HMCL-PE 启动器上手实测

手机也能跑 Forge——HMCL-PE 启动器上手实测 【免费下载链接】HMCL-PE-CN Hello Minecraft! Launcher for Android 项目地址: https://gitcode.com/gh_mirrors/hmc/HMCL-PE-CN 手机上玩 Minecraft,多数人选的只有基岩版:想换老版本、想装模组&am…

2026/8/22 14:45:08 阅读更多 →
BetterGI|基于计算机视觉的原神自动化开源辅助工具

BetterGI|基于计算机视觉的原神自动化开源辅助工具

BetterGI|基于计算机视觉的原神自动化开源辅助工具 【免费下载链接】better-genshin-impact 📦BetterGI 更好的原神 - 自动拾取 | 自动剧情 | 全自动钓鱼(AI) | 全自动七圣召唤 | 自动伐木 | 自动刷本 | 自动采集/挖矿/锄地 | 一条龙 | 全连音游 | 自动…

2026/8/22 14:45:08 阅读更多 →
如何自己动手做一个迷你CDN?http_study之Nginx proxy_cache缓存完整实战

如何自己动手做一个迷你CDN?http_study之Nginx proxy_cache缓存完整实战

如何自己动手做一个迷你CDN?http_study之Nginx proxy_cache缓存完整实战 【免费下载链接】http_study follow me to study http 项目地址: https://gitcode.com/gh_mirrors/ht/http_study 📌 http_study 是《透视HTTP协议》的配套开源项目&#x…

2026/8/22 14:45:08 阅读更多 →
B站视频下载:bilibili-downloader免费拉取4K源流

B站视频下载:bilibili-downloader免费拉取4K源流

B站视频下载:bilibili-downloader免费拉取4K源流 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 出差或飞行途中&#xff…

2026/8/22 14:45:07 阅读更多 →
gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获

gRPC 错误处理入门第一课:用 grpc-errors 快速搞懂 9 大语言的报错与捕获 【免费下载链接】grpc-errors A handy guide to gRPC errors 项目地址: https://gitcode.com/gh_mirrors/gr/grpc-errors 学习 gRPC 错误处理时,新手最大的困惑就是不同语…

2026/8/22 14:44:07 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →