HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图
HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图
【问题现象】
组件内容高度超过手机高度时,组件截图功能无法截全图。
【背景知识】
- componentSnapshot.get:获取已加载的组件的截图,传入组件的组件标识,找到对应组件进行截图。
- componentSnapshot.createFromBuilder:在应用后台渲染CustomBuilder自定义组件,并输出其截图。
- 区别在于componentSnapshot.get在组件内容超过手机高度时也可以截全图,componentSnapshot.createFromBuilder不可以。组件截图功能见官方文档。
【定位思路】
- 此场景有说明需要截图的组件内容会超出屏幕,因此需要在内容区域添加scroll。
- 当内容区超过手机高度时,会存在移动才能显示全部内容,componentSnapshot.createFromBuilder无法渲染需要滑动的组件截图,因此用componentSnapshot.get。
【解决方案】
步骤一:此场景为组件内容较多,超过屏幕高度,判断有无加scroll。
步骤二:使用componentSnapshot.get获取已加载的组件的截图, 在组件内容超过手机高度时也可以截全图。
import { componentSnapshot } from '@kit.ArkUI';
import { image } from '@kit.ImageKit';
@Entry
@Component
struct OffscreenSnapshotExample {
@State pixmap: image.PixelMap | undefined = undefined
// 构建需要截图的组件
@Builder
RandomBuilder() {
Flex({ direction: FlexDirection.Column, justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
// 步骤一:组件内容过长时,添加scroll保证可以截全图
Scroll(){
Text('开始1111:指定是否允许在截图之前,校验图片解码状态。如果为true,则会在截图之前检查所有Image组件是否已经解码完成,如果没有完成检查,则会放弃截图并返回异常。\n' +
'\n' +
'默认值:false指定是否允许在截图之前,校验图片解码状态。如果为true,则会在截图之前检查所有Image组件是否已经解码完成,如果没有完成检查,则会放弃截图并返回异常。\n' +
'\n' +
'默认值:false指定是否允许在截图之前,校验图片解码状态。如果为true,则会在截图之前检查所有Image组件是否已经解码完成,如果没有完成检查,则会放弃截图并返回异常。\n' +
'\n' +
'默认值:false 结束22222')
.fontSize(30)
.width("100%")
}
}
.visibility(Visibility.Hidden)
.width(300)
.backgroundColor(Color.Green)
// 组件id设置
.id("hello")
}
build() {
Scroll() {
Column() {
// 构建组件截图触发按钮
Button("click to generate offscreen UI snapshot")
.onClick(()=> {
// 步骤二:通过componentSnapshot.get获取id为hello的组件的截图,可以截长图
componentSnapshot.get("hello", async (error: Error, pixmap: image.PixelMap) => {
this.pixmap = pixmap
})
})
// 显示截图
Stack({alignContent: Alignment.Top}) {
Image(this.pixmap)
.height(400)
.width(300)
.objectFit(ImageFit.Contain)
.border({ color: Color.Black, width: 2 })
this.RandomBuilder()
}
}.width('100%').margin({ left: 10, top: 5, bottom: 5 })
}
}
}
更多关于HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
组件内容高度超过手机高度时,使用 componentSnapshot.get
方法可以截取全图,而 componentSnapshot.createFromBuilder
无法截取需要滑动的组件截图。确保在内容区域添加 scroll
,并使用 componentSnapshot.get
获取已加载组件的截图。