当前位置: 首页 > article >正文

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开发者


http://www.kler.cn/a/398469.html

相关文章:

  • 云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测
  • 【异常解决】Linux shell报错:-bash: [: ==: 期待一元表达式 解决方法
  • 有序数组的平方(leetcode 977)
  • AI大模型如何重塑软件开发流程:智能化与自动化的新时代
  • Codeforces Round 987 (Div. 2) ABCD
  • 深入List集合:ArrayList与LinkedList的底层逻辑与区别
  • AWTK-WIDGET-WEB-VIEW 发布
  • C++11实现线程库
  • 21.3D surface
  • Python 子进程输出重定向以后,部分内容会出现在父进程的控制台屏幕上
  • .NET 一款SYSTEM权限隐藏的计划任务工具
  • vxe-grid table 校验指定行单元格的字段,只校验某个列的字段
  • Leetcode 3356. Zero Array Transformation II
  • uni-app快速入门(六)--rpx尺寸单位与Flex布局
  • 【网络安全面经】OSI七层模型每层都有什么协议
  • 【网络安全】SSL(一):为什么需要 Keyless SSL?
  • 023、ELK 从入门到实践
  • 【AI日记】24.11.17 看 GraphRAG 论文,了解月之暗面
  • 深度学习中常见的学习率调整策略
  • 蓝桥杯c++算法学习【4】之简单数论(阶乘约数、求值、循环小数、等差数列、最大比例:::非常典型的必刷例题!!!)
  • PyCharm2024.2.4安装
  • 【初阶数据结构与算法】链表刷题之链表分割、相交链表、环形链表1、环形链表I、环形链表II
  • Ajax获取PHP端csv转的json数据并js前端排序与分页
  • 华东师范大学数学分析第五版PDF习题答案上册及下册
  • 第二十三章 TCP 客户端 服务器通信 - SSL TLS组件
  • java实现代码沙盒(docker-java)