【HarmonyOS NEXT】实现截图功能

news2024/9/20 0:19:45

【HarmonyOS NEXT】实现截图功能

【需求】

实现:实现点击截图按钮,实现对页面/组件的截图

【步骤】

  1. 编写页面UI
@Entry
@Component
struct Screenshot {
  @Builder
  getSnapContent() {
    Column() {
      Image('')
        .width('100%')
        .objectFit(ImageFit.Auto)
        .borderRadius(6)
    }
    .padding('10%')
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .backgroundColor('rgba(0,0,0,0.5)')
    .onClick(() => {
    })

  }

  @Builder
  getIconUI() {
    Image($r('app.media.ic_snapshot'))
      .width(20)
      .aspectRatio(1)
      .fillColor(Color.Black)
      .margin({ right: 10 })
      .onClick(async () => {
      })
  }

  build() {
    Column({ space: 5 }) {
      Row() {
        Text('Hello Snapshot').fontSize(24)
        this.getIconUI()
      }.justifyContent(FlexAlign.SpaceBetween).padding(20).width('100%')

      Image('https://img20.360buyimg.com/img/jfs/t1/241153/31/4968/64736/65e53e56Fd3868b6e/b595d41ca8447ea4.jpg')
        .width('60%')
        .border({ width: 1, color: Color.Red })
        .borderRadius(8)

      Text('我是内容1')
      Text('我是内容2')
      Text('我是内容3')
    }
    .height('100%')
    .width('100%')
    .padding({ top: 50 })
    .backgroundColor(Color.White)
  }
}
  1. 导包
import { image } from '@kit.ImageKit';
import { componentSnapshot } from '@kit.ArkUI';
  1. 给需要快照的组件设置id
Column(){
        
}.id('page')
  1. 点击调api实现截图效果
Image($r('app.media.ic_snapshot'))
  .onClick(async () => {
    this.snapshotImage = await componentSnapshot.get('page')
    this.showSnap = !this.showSnap // 显示截屏
    // Todo: 截屏音效
    // Todo: 保存到相册
  })

【完整代码】

import { image } from '@kit.ImageKit';
import { componentSnapshot } from '@kit.ArkUI';

@Entry
@Component
struct Screenshot {
  @State snapshotImage: image.PixelMap | null = null
  @State showSnap: boolean = false

  @Builder
  getSnapContent() {
    Column() {
      Image(this.snapshotImage)
        .width('100%')
        .objectFit(ImageFit.Auto)
        .borderRadius(6)
    }
    .padding('10%')
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .backgroundColor('rgba(0,0,0,0.5)')
    .onClick(() => {
      this.showSnap = false
    })

  }

  @Builder
  getIconUI() {
    Image($r('app.media.ic_snapshot'))
      .width(20)
      .aspectRatio(1)
      .fillColor(Color.Black)
      .margin({ right: 10 })
      .onClick(async () => {
        this.snapshotImage = await componentSnapshot.get('page')
        this.showSnap = !this.showSnap // 显示截屏
        // Todo: 截屏音效
        // Todo: 保存到相册
      })
  }

  build() {
    Column({ space: 5 }) {
      Row() {
        Text('Hello Snapshot').fontSize(24)
        this.getIconUI()
      }.justifyContent(FlexAlign.SpaceBetween).padding(20).width('100%')

      Image('https://img20.360buyimg.com/img/jfs/t1/241153/31/4968/64736/65e53e56Fd3868b6e/b595d41ca8447ea4.jpg')
        .width('60%')
        .border({ width: 1, color: Color.Red })
        .borderRadius(8)

      Text('我是内容1')
      Text('我是内容2')
      Text('我是内容3')
    }
    .height('100%')
    .width('100%')
    .padding({ top: 50 })
    .backgroundColor(Color.White)
    .id('page')
    .bindContentCover($$this.showSnap, this.getSnapContent(), {
      modalTransition: ModalTransition.NONE
    })
  }
}

【效果图】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115047.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽(Signals and Slots) 这里用到了C类与对象的很多…

网络协议详解

目录 1.认识网络协议 2网络协议的设计 2.1网络通信的问题 2.2网络协议的分层设计 软件分层与网络分层 3.OSI七层网络模型 各层次的介绍如下 4.TCP/IP 五层协议 各层次说明 各层次所解决的问题 5.网络和操作系统之间的关系 单主机下 多主机下 6.重新理解网络协议 …

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数

【鸿蒙HarmonyOS NEXT】页面之间相互传递参数 一、环境说明二、页面之间相互传参 一、环境说明 DevEco Studio 版本: API版本:以12为主 二、页面之间相互传参 说明: 页面间的导航可以通过页面路由router模块来实现。页面路由模块根据页…

kubernetes微服务基础及类型

目录 1 什么是微服务 2 微服务的类型 3 ipvs模式 ipvs模式配置方式 4 微服务类型详解 4.1 ClusterIP 4.2 ClusterIP中的特殊模式headless 4.3 nodeport 4.4 metalLB配合loadbalance实现发布IP 1 什么是微服务 用控制器来完成集群的工作负载,那么应用如何暴漏出去&…

JavaWeb——JavaScript(3/4)-JS对象:BOM、DOM(Window、Location,概念、标准模型、获取元素对象)

目录 BOM 介绍 Window 案例(1) Location DOM 概念 标准模型 获取元素对象 案例(2) 原始代码 完整代码 JS对象 BOM 介绍 概念:Browser Object Model 浏览器对象模型,允许JavaScript与浏览器对话,JavaScript 将浏览器的各个组成部…

git 提交自动带上storyid

公司里的运维团队的产品经理,那老六提出说要在每个提交带上的jira storyid或者bugid,不用他自己弄不顾他人麻烦,真想问候他的xx。不过既然已经成为定局,还是想想有没有其他办法。经一番调研,网上有比较零碎的信息&…

攻防世界--->地穴

前言:学习笔记。 下载 解压 查壳。 64位ida打开。 进入主函数。 很容易得知,这是一个RC4加密。 【 (题外话) 在reverse中,RC4考点,不会很难。 reverse中RC4关键点就是,抓住异或。 一般解这种…

Open a folder or workspace... (File -> Open Folder)

问题:vscode Open with Live Server 时 显示Open a folder or workspace... (File -> Open Folder)报错 解决:不可以单独打开文件1.html ; 需要在文件夹里打开 像这样

【哈希表】深入理解哈希表

目录 1、哈希表简介2、哈希函数2.1、概念2.2、常用的哈希函数2.2.1、直接定址法2.2.2、除留余数法2.2.3、平方取中法2.2.4、基数转换法 3、哈希冲突3.1、概念3.2、开放地址法【闭散列:key存放到冲突位置的“下一个”空位置】3.3、链地址法【开散列:冲突位…

SAM 2:分割图像和视频中的任何内容

文章目录 摘要1 引言2 相关工作3 任务:可提示视觉分割4 模型5 数据5.1 数据引擎5.2 SA-V数据集 6 零样本实验6.1 视频任务6.1.1 提示视频分割6.1.2 半监督视频对象分割6.1.3 公平性评估 6.2 图像任务 7 与半监督VOS的最新技术的比较8 数据和模型消融8.1 数据消融8.2…

dr 航迹推算 知识介绍

DR(Dead Reckoning)航迹推算是一种在航海、航空、车辆导航等领域中广泛使用的技术,用于估算物体的位置。DR航迹推算主要通过已知的初始位置和运动参数(如速度、方向)来预测物体的当前位置。以下是 DR 航迹推算的详细知…

跨平台电商数据整合:item_get API在电商大数据平台中的角色

在电商行业蓬勃发展的今天,跨平台运营已成为众多商家的必然选择。然而,随之而来的数据孤岛问题却成为了制约电商企业进一步发展的瓶颈。为了解决这一问题,电商大数据平台应运而生,而item_get API作为获取商品详情的关键接口&#…

统计学第6天

1、变量间关系的度量 函数关系 (1)是一一对应的确定关系; (2)设有两个变量x和y,变量y随x一起变化,并完全依赖于x,当x取某个数值时,y根据确定的关系取相应的值,称y是x的…

建设网盘聚合中心—Win10+Alist+RaiDrive

经常需要在网上找各种资源,但遇到 2 个问题: 1. 大部分网盘都需要先将文件保存在自己网盘后才能下载,也就是必须创建对应网盘账号。 2. 有些网盘还必须要下载客户端才能下载文件。 创建账号无法避免,但可以不用下载那么多的客户端…

写在 Pencils Protocol TGE 前:加密市场共识才是王道,拥抱社区

“Pencils Protocol 正在成为本轮市场周期中,加密项目建立共识最有力的工具!” 对于加密项目而言,代币 TGE 是一个非常重要的事情,它不仅仅意味着生态内经济系统的全面启动,同时也意味着项目生态市场的全面开启。当然…

《Rust避坑式入门》第1章:挖数据竞争大坑的滥用可变性

赵可菲是一名Java程序员,一直在维护一个有十多年历史的老旧系统。这个系统即将被淘汰,代码质量也很差,每次上线都会出现很多bug,她不得不加班修复。公司给了她3个月的内部转岗期,如果转不出去就会被裁员。她得知公司可…

AF透明模式/虚拟网线模式组网部署

透明模式组网 实验拓扑 防火墙基本配置 接口配置 eth1 eth3 放通策略 1. 内网用户上班时间(9:00-17:00)不允许看视频、玩游戏及网上购物,其余时 间访问互联网不受限制;(20 分) 应用控制策略 2. 互联…

二维空间向量的p范数等密度轨迹

图2-52:二维空间向量的 ℓ p \ell p ℓp范数等密度轨迹。 想过两种方式,还是放在一起省地方。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源…

数据库系统原理及应用——仓库管理系统

目录 引言 一.需求设计说明书 1.需求分析 2.系统背景 3.系统目标 4.人员分配 5.数据流程图(DFD) 二.概念结构设计 1.局部E-R图 (1)供应商 (2)货物 (3)客户 &…

1-19 平滑处理——双边滤波 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 cv2.bilateralFilter函数用于对图像进行双边滤波。双边滤波是一种保持边缘的平滑技术,常用于图像去噪声和增强图像的细节。函数的四个参数如下: 三、运行现象 四、完整工程贴出 一、提前准备 1、树莓派4B 及 64位系统…