ArkTs简单入门案例:简单的图片切换应用界面

在鸿蒙 OS 应用开发的过程中,我们常常需要通过组合各种组件和编写相应的逻辑来实现丰富多样的功能。今天,我就来和大家详细解析一段实现简单图片切换功能的代码,希望能帮助到那些刚接触鸿蒙 OS 应用开发的朋友们。

一、代码导入部分

@Entry
@Component
struct Index {
  @State isToggle: boolean = false;

  build() {
    Column({space: 20}){
      if(this.isToggle){
        Image('pages/image/1.png')
          .height(300)
          .width(300)
          .borderRadius(20)
      } else {
        Image('pages/image/2.png')
          .height(300)
          .width(300)
          .borderRadius(20)
      }
      Row({space: 50}){
        Button('图片1')
          .onClick(() => {
            this.isToggle = false
          })
        Button('图片2')
          .onClick(() => {
            this.isToggle = true
          })
      }
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }

二、具体代码分析

1. @Entry

  • 这是一个装饰器(Decorator),用于标记一个组件(Component)作为应用程序的入口点。在使用特定框架(鸿蒙 OS 相关框架)开发应用时,被标记为 @Entry 的组件将是应用启动后首先被渲染和展示的部分。

2. @Component

  • 同样是一个装饰器,用于定义下面的结构体 Index 为一个组件。组件是构建用户界面的基本单元,它可以包含其他组件、视图元素以及相关的逻辑处理代码。

3. struct Index {... }

  • 这里定义了一个名为 Index 的结构体,在这个结构体内部将构建整个应用的界面以及相关的状态和逻辑。结构体是一种数据结构,可以包含多个成员变量和函数,在这里主要用于组织界面组件和相关逻辑代码。

4. @State isToggle: boolean = false;

  • @State 是一个装饰器,从我们前面导入的 @ohos/state 库中获取,用于标记 isToggle 这个变量为组件的状态变量。状态变量的特点是当它的值发生改变时,会触发组件的重新渲染,以反映最新的状态变化。在这里,isToggle 被初始化为 false,它将用于控制显示哪一张图片。

5. build() {... }

  • build 函数是组件结构体中必须定义的函数,它用于构建组件的用户界面。在这个函数内部,通过组合各种视图组件(如 ColumnImageRowButton 等)来创建最终展示给用户的界面布局和内容。

6. Column({space: 20}){... }

  • 创建一个垂直布局的容器组件 Column,它会将包含在其中的子组件按照垂直方向依次排列。{space: 20} 是传递给 Column 的时间参数,表示相邻子组件之间在垂直方向上的间距为 20 个单位(具体单位可能根据应用的设计规范而定)。

7. if(this.isToggle){... } else {... }

  • 这是一个条件判断语句。根据 this.isToggle 的值(即组件状态变量的值)来决定显示哪一张图片。如果 isToggle 为 true,则显示 Image('pages/image/1.png') 相关设置的图片;如果 isToggle 为 false,则显示 Image('pages/image/2.png') 相关设置的图片。

8. Image('pages/image/1.png') 和 Image('pages/image/2.png')

  • 分别用于创建显示指定路径下图片的类型。这里的路径 pages/image/1.png 和 pages/image/2.png 就是要显示的图片在应用资源中的存储位置。通过这些组件,将对应的图片展示在界面上。

9. .height(300).width(300).borderRadius(20)

  • 这些都是对图片组件(Image)的样式设置方法。.height(300) 设置图片的高度为 300 个单位;.width(300) 设置图片的宽度为 300 个单位;.borderRadius(20) 给图片设置一个半径为 20 个单位的圆角效果,使图片呈现出圆角矩形的外观。

10. Row({space: 50}){... }

  • 创建一个水平布局的容器组件 Row,它会将包含在其中的子组件按照水平方向依次排列。{space: 50}$是传递给 Row` 的参数,表示相邻子组件之间在水平方向上的间距为 50 个单位。

11. Button('图片1') 和 Button('图片2')

  • 分别用于创建两个按钮组件,按钮上显示的文本分别为 “图片 1” 和 “图片 2”。这些按钮将作为用户交互的元素,用于触发改变图片显示的操作。

12. .onClick(() => {... })

  • 这是给按钮组件添加点击事件处理函数的方法。对于 Button('图片1'),当用户点击这个按钮时,会执行 () => { this.isToggle = false } 这个匿名函数,即将 isToggle 的值设置为 false,从而触发界面重新渲染,显示 Image('pages/image/2.png') 对应的图片;同理,对于 Button('图片2'),点击时会执行 () => { this.isToggle = true },显示 Image('pages/image/1.png') 对应的图片。

13. .height('100%').width('100%').justifyContent(FlexAlign.Center)

  • 这些是对整个 Column 组件(也就是最外层的布局容器)的样式设置。.height('100%')$和 $.width('100%')$表示让 Column组件占据整个父容器的高度和宽度,确保其铺满整个可用空间。$.justifyContent(FlexAlign.Center)$是设置Column` 对 子组件在垂直方向上的对齐方式为居中对齐,使整个界面布局看起来更加整齐美观。

三、运行结果

四、总结

这段代码主要实现了一个简单的图片切换应用界面。通过定义一个组件 Index,利用状态变量 isToggle 来控制显示两张不同的图片(根据 isToggle 的值在 Image('pages/image/1.png') 和 Image('pages/image/2.png')$之间切换)。同时,设置了两个按钮(“图片1”和“图片2”),用户点击按钮可以改变 isToggle$ 的值,进而实现图片的切换效果。整个界面采用了 Column(垂直布局)和 Row(水平布局)的容器组件来组织图片和按钮,并且对各个组件进行了相应的样式设置,以呈现出一个较为美观、功能完整的图片切换应用界面。

希望通过这次对代码的详细解析,能让大家对鸿蒙 OS 应用开发中的界面构建和逻辑处理有更深入的理解,在自己的开发之旅中能够更加得心应手。

五、官方文档

如果想要了解整个的项目结构,还有编辑器的使用可以去看详细的官方文档去了解

工具简介-DevEco Studio - 华为HarmonyOS开发者

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【项目组件】第三方库——websocketpp

目录 第三方协议:websocket websocket简介 websocket特点 websocket协议切换 websocket协议格式段 websocketpp库介绍 endpoint server connection websocketpp库搭建服务器流程 基本框架实现 业务处理回调函数的实现 http_callback open_callback …

【手撕 Spring】 -- Bean 的创建以及获取

🌈手写简化版 Spring 框架:通过构建一个精简版的 Spring 框架,深入理解 Spring 的核心机制,掌握其设计思想,进一步提升编程能力 🌈项目代码地址:https://github.com/YYYUUU42/mini-Spring 如果该…

Jdbc学习笔记(四)--PreparedStatement对象、sql攻击(安全问题)

目录 (一)使用PreparedStatement对象的原因: 使用Statement对象编写sql语句会遇到的问题 ​编辑 (二)sql攻击 1.什么是sql攻击 2.演示sql攻击 (三)防止SQL攻击 1.PreparedStatement是什么 …

Jmeter中的定时器(二)

5--JSR223 Timmer 功能特点 自定义延迟逻辑:使用脚本语言动态计算请求之间的延迟时间。灵活控制:可以根据测试数据和条件动态调整延迟时间。支持多种脚本语言:支持 Groovy、JavaScript、BeanShell 等多种脚本语言。 支持的脚本语言 Groov…

【Istio】Istio原理

第一章 Istio原理 一、服务网格(servicemesh)1、六个时代2、服务网格定义及优缺点二、Istio1、Istio定义2、Istio安装3、Istio架构1.5版本之前1.5版本之后4、bookinfo案例架构部署5、CRD一、服务网格(servicemesh) 微服务:架构风格,职责单一,api通信 服务网格:微服务时代的…

4.远程访问及控制

SSH 简介: SSH(Secure Shell)协议是一种安全通道协议,对通信数据进行了加密处理,用于远程管理。 OpenSSH简介 OpenSSH 服务名称:sshd 服务端主程序:/usr/sbin/sshd 服务端配置文件&#xf…

精通rust宏系列教程-入门篇

Rust最令人敬畏和强大的特性之一是它使用和创建宏的能力。不幸的是,用于创建宏的语法可能相当令人生畏,并且对于新开发人员来说,这些示例可能会令人不知所措。我向你保证Rust宏非常容易理解,本文将为你介绍如何创建自己的宏。 什么…

设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

前言: 两个本想描述一样的意思的词,只因一字只差就让人觉得一个是好牛,一个好搞笑。往往我们去开发编程写代码时也经常将一些不恰当的用法用于业务需求实现中,但却不能意识到。一方面是由于编码不多缺少较大型项目的实践&#xff…

kubernetes简单入门实战

本章将介绍如何在kubernetes集群中部署一个nginx服务,并且能够对其访问 Namespace Namespace是k8s系统中一个非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。 默认情况下,k8s集群中的所有的Pod都是可以相…

webpack5 + vue3 从零配置项目

前言 虽然在实际项目当中很少会从 0 到 1 配置一个项目,毕竟很多重复工作是没有必要的,脚手架将这些重复性的工作进行了整合,方便开发者使用。也正因如此,导致部分开发者过于依赖脚手架,却不清楚其内部的实现流程&…

Linux git-bash配置

参考资料 命令提示符Windows下的Git Bash配置,提升你的终端操作体验WindowsTerminal添加git-bash 目录 一. git-bash配置1.1 解决中文乱码1.2 修改命令提示符 二. WindowsTerminal配置git-bash2.1 添加git-bash到WindowsTerminal2.2 解决删除时窗口闪烁问题 三. VS…

(RK3566驱动开发 - 1).pinctrl和gpio子系统

一.设备树 pinctrl部分可以参考 rockchip 官方的绑定文档 :kernel/Documentation/devicetree/bindings/pinctrl PIN_BANK:引脚所属的组 - 本次例程使用的是 GPIO3_A1 这个引脚,所以所属的组为 3; PIN_BANK_IDX:引脚的…

基于OpenFOAM和深度学习驱动的流体力学计算与应用

在深度学习与流体力学深度融合的背景下,科研边界不断拓展,创新成果层出不穷。从物理模型融合到复杂流动模拟,从数据驱动研究到流场智能分析,深度学习正以前所未有的力量重塑流体力学领域。近期在Nature和Science杂志上发表的深度学…

uniapp设置tabBar高斯模糊并设置tabBar高度占位

1、设置tabBar高斯模糊 2、设置tabBar高度占位 (1)需要先在App.vue中获取一下 uni.getSystemInfoSync().windowBottom; //返回值是tabBar的高度(2)在全局样式文件/uview-ui/libs/css/style.vue.scss中定义一个全局样式 3、在需…

嵌入式Linux输入系统应用编程学习总结

嵌入式Linux输入系统应用编程学习总结 目录 嵌入式Linux输入系统应用编程学习总结1. 嵌入式Linux输入系统介绍2. Linux设备输入数据的几个结构体2.1 内核中表示一个输入设备的结构体2.2 APP从输入设备获取的数据类型结构体 3. 查看LCD设备信息和输入数据3.1 查看设备信息3.2 使…

力扣=Mysql-3322- 英超积分榜排名 III(中等)

一、题目来源 3322. 英超积分榜排名 III - 力扣(LeetCode) 二、数据表结构 表:SeasonStats --------------------------- | Column Name | Type | --------------------------- | season_id | int | | team_id …

HTML之列表学习记录

练习题&#xff1a; 图所示为一个问卷调查网页&#xff0c;请制作出来。要求&#xff1a;大标题用h1标签&#xff1b;小题目用h3标签&#xff1b;前两个问题使用有序列表&#xff1b;最后一个问题使用无序列表。 代码&#xff1a; <!DOCTYPE html> <html> <he…

【ElasticSearch】定位分片不分配

记录遇到的es集群分片不分配的情况--待补全 定位分片不分配的原因 定位分片不分配的原因 在shell客户端执行如下的语句&#xff1a; curl -X GET "http://192.168.0.209:9200/_cat/shards?v&hindex,shard,prirep,state,unassigned.reason"集群中各分片的状态都…

10款PDF合并工具讲解与推荐!!!

在现在的大环境下&#xff0c;PDF文件因其跨平台、格式固定等优势&#xff0c;成为了我们工作和学习中不可或缺的一部分。是最常用的文档格式之一。然而&#xff0c;面对多个PDF文件需要合并成一个的场景&#xff0c;如何选择一款高效、易用的PDF合并工具就显得尤为重要。今天&…

「QT」窗口类 之 QWidget 窗口基类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…