HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图

HarmonyOS鸿蒙Next中组件内容高度超过手机高度时,组件截图功能无法截全图

【问题现象】

组件内容高度超过手机高度时,组件截图功能无法截全图。

点击放大

【背景知识】

  1. componentSnapshot.get:获取已加载的组件的截图,传入组件的组件标识,找到对应组件进行截图。
  2. componentSnapshot.createFromBuilder:在应用后台渲染CustomBuilder自定义组件,并输出其截图。
  3. 区别在于componentSnapshot.get在组件内容超过手机高度时也可以截全图,componentSnapshot.createFromBuilder不可以。组件截图功能见官方文档

【定位思路】

  1. 此场景有说明需要截图的组件内容会超出屏幕,因此需要在内容区域添加scroll。
  2. 当内容区超过手机高度时,会存在移动才能显示全部内容,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 获取已加载组件的截图。

回到顶部