ArkUI指南文档示例
介绍
组件截图是将应用内一个组件节点树的渲染结果生成位图的能力,支持两种方式:一种是对已挂树显示的组件进行截图,另一种是对通过Builder或ComponentContent实现的离线组件进行截图。
本示例为使用组件截图的配套示例工程。
本示例展示了组件截图能力的常见使用方式和典型使用场景。
效果预览
| 一键截图 | 滚动截图 | 封装全局截图接口 |
|---|---|---|
![]() |
![]() |
![]() |
使用说明
-
点击应用首页"ScrollSnapshot"按钮,跳转到对应的界面。
-
在"ScrollSnapshot"页面,点击"One-Tap Screenshot"按钮,稍等后自动生成整个滚动组件页面长截图缩略图,点击缩略图可以进行放大预览,点击“保存图片”按钮,图片会保存到图库。
-
在"ScrollSnapshot"页面,点击"Scroll Screenshot"按钮,列表视图会自动滚动,此时点击列表或者直到列表滑动到底部,会自动生成从滑动开始到滑动结束这段期间的的长截图,缩略图操作与步骤2相同。
-
点击应用首页"GlobalSnapshot"按钮,跳转到对应的界面。
-
在"GlobalSnapshot"界面点击"click to get snapshot"触发封装全局截图接口。
工程目录
├──entry/src/main/ets/
│ ├──common
│ │ ├──CommonUtils.ets // 通用工具类
│ │ ├──ImageUtils.ets // 图片处理工具类
│ │ ├──LazyDataSource.ets // 懒加载数据源管类
│ │ ├──Logger.ets // 日志打印工具类
│ │ └──PopupUtils.ets // 弹窗位置计算工具类
│ ├──entryability
│ │ └──EntryAbility.ets // 程序入口类
│ ├──entrybackupability
│ │ └──EntryBackupAbility.ets // 数据备份恢复类
│ ├──pages
│ │ └──Index.ets // 应用入口页
│ │ └──GlobalSnapshot.ets // 封装全局截图接口测试页
│ │ └──ScrollSnapshot.ets // 滚动截图测试页
│ └──view
│ ├──NewsItem.ets // List列表项视图
│ ├──ScrollSnapshot.ets // 滚动组件长截图视图
│ ├──SnapshotPreview.ets // 长截图预览弹窗
│ └──GlobalScreenshot.ets // 封装全局截图接口
└──entry/src/main/resources // 应用静态资源目录
具体实现
-
实现长内容滚动截图(滚动 + 拼接)。源码参考ScrollSnapshot.ets
-
添加滚动控制器及事件监听,为了能够模拟滚动,以及监听组件滚动的具体offset,需要为List(此处以列表为例)组件添加滚动控制器以及滚动监听。
-
循环滚动截图并缓存,通过实现一个递归方法滚动循环截图,并在滚动过程配合一些动效实现。
-
拼接长截图,使用image.createPixelMapSync()方法创建长截图longPixelMap,并遍历之前保存的图像片段数据(this.areaArray),构建image.PositionArea对象area,然后调用longPixelMap.writePixelsSync(area)方法将这些片段逐个写入到正确的位置,从而拼接成一个完整的长截图。
-
保存截图,使用安全控件SaveButton实现截图保存到相册。
-
保存完成后释放位图,当位图对象不再使用时,应及时将其赋值为空。
-
相关权限
不涉及。
依赖
不涉及。
约束与限制
-
本示例仅支持标准系统上运行, 支持设备:华为手机。
-
HarmonyOS系统:HarmonyOS 5.0.5 Release及以上。
-
DevEco Studio版本:6.0.0 Release及以上。
-
HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。
下载
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo ArkUISample/ComponentSnapshot > .git/info/sparse-checkout
git remote add origin https://gitcode.com/harmonyos_samples/guide-snippets.git
git pull origin master

