首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • GM-3568JHF

        • 一、简介

          • GM-3568JHF 简介
        • 二、快速开始

          • 00 前言
          • 01 环境搭建
          • 02 编译说明
          • 03 烧录指南
          • 04 调试工具
          • 05 软件更新
          • 06 查看信息
          • 07 测试命令
          • 08 应用编译
          • 09 源码获取
        • 三、外设与接口

          • 01 USB
          • 02 显示与触摸
          • 03 以太网
          • 04 WIFI
          • 05 蓝牙
          • 06 TF-Card
          • 07 音频
          • 08 串口
          • 09 CAN
          • 10 RTC
        • 四、应用开发

          • 01 UART读写案例
          • 02 按键检测案例
          • 03 LED灯闪烁案例
          • 04 MIPI屏幕检测案例
          • 05 读取 USB 设备信息案例
          • 06 FAN 检测案例
          • 07 FPGA FSPI 通信案例
          • 08 FPGA DMA 读写案例
          • 09 GPS调试案例
          • 10 以太网测试案例
          • 11 RS485读写案例
          • 12 FPGA IIC 读写案例
          • 13 PN532 NFC读卡案例
          • 14 TF卡读写案例
        • 五、QT开发

          • 01 ARM64交叉编译器环境搭建
          • 02 QT 程序加入开机自启服务
        • 六、RKNN_NPU开发

          • 01 RK3568 NPU 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

          • ARM与FPGA通讯
          • FPGA开发手册
        • 八、其他

          • 01 根目录文件系统的修改
          • 02 系统自启服务
        • 九、资料下载

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 01 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 02 资料获取

            • 1 OpenHarmony 官方资料
          • 03 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 04 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 05 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 01 指南
          • 02 设备树介绍
          • 03 NAPI 入门
          • 04 ArkTS入门
          • 05 NAPI开发实战演示
          • 06 GPIO介绍
          • 07 I2C通讯
          • 08 SPI通信
          • 09 PWM 控制
          • 10 串口通讯
          • 11 TF卡
          • 12 屏幕
          • 13 触摸
          • 14 Ethernet(以太网)
          • 15 M.2 硬盘
          • 16 音频
          • 17 WIFI & BT
          • 18 摄像头
        • 六、资料下载

          • 资料下载
      • M5-R1

        • 一、简介

          • M5-R1 开发文档
        • 二、快速上手

          • 镜像烧录
          • 环境搭建
          • 下载源码
        • 三、外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
        • 四、资料下载

          • 资料下载
      • Pico-G1

        • 一、产品概述

          • 01 产品介绍
          • 02 SDK版本基本信息
        • 二、快速入门

          • 01 开发环境搭建
          • 02 镜像编译
          • 03 镜像烧录
          • 04 系统登录
          • 05 网络配置
          • 06 文件传输
          • 07 SDK目录结构
          • 08 部署第一个应用程序
          • 09 部署第一个驱动程序
          • 10 SD卡挂载
        • 三、外设与接口

          • 01 GPIO控制
          • 02 UART串口通信
          • 03 I2C 通信
          • 04 SPI 通信
        • 四、MPP媒体开发

          • 01 MPP媒体处理软件
          • 02 图像处理链路
          • 03 视频输入
          • 04 图像编码
        • 五、NPU与AI

          • 01 NPU驱动与运行库架构
          • 02 .xmm 模型加载
          • 03 SVP视频处理
          • 04 AI降噪 (AI_NR)
        • 六、应用程序示例

          • 01 区域运动检测应用
          • 02 MTCNN 人脸检测应用
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 第一章 环境搭建
          • 第二章 下载源码
          • 第三章 编译源码
        • 五、内核的外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • M-K1HSE 简介
        • 二、快速开始

          • 开发环境搭建
          • 源码获取
          • 编译说明
          • 烧录指南
        • 三、应用开发

          • 00 应用开发环境搭建
          • 01 第一个应用-Hello World
        • 四、外设与接口

          • 01 Audio
          • 02 RS485
          • 03 Display
        • 五、系统定制开发

          • 系统移植
          • 系统定制
          • 驱动开发
          • 系统调试
          • OTA升级
        • 六、资料下载

          • 资料下载
    • EVS相机

      • CF-NRS1

        • 一、简介

          • 01-产品介绍
          • 02-相关概念
          • 03-MultiVision Studio 介绍
        • 二、开发

          • 01-ShiMetaPi Hybrid vision SDK 介绍
          • 02-Hybrid_vision_toolkit
          • 03-Hybrid_vision_toolkit API (C++)
          • 04 Hybrid Vision algo
          • 05 Hybrid vision algo API
          • 06 EVS Network Server
          • 07 EVS Time Sync
          • 08 Web Window
        • 三、资料下载

          • 资料下载
        • 四、常见问题

          • 常见问题解决指南
      • CF-CRA2

        • 一、简介

          • CF-NRS2 简介
        • 二、资料下载

          • 资料下载
      • EVS模块

        • 一、相关概念
        • 二、硬件准备与环境配置
        • 三、示例程序使用指南
        • 资料下载
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 简介

          • AIBOX-1684X-416简介
        • Demo简单操作指引

          • shimeta智慧监控demo的简单使用说明
      • RDK-X5

        • 简介

          • RDK-X5 硬件简介
        • 快速开始

          • RDK-X5 快速开始
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
      • RDK-S100

        • 简介

          • RDK-S100 硬件简介
        • 快速开始

          • RDK-S100 硬件简介
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-图像处理基础
            • 实验03-目标检测
            • 实验04-图像分割
      • RK1828

        • 一、简介

          • RK1828 AI 协处理器
        • 二、快速开始

          • 硬件安装与验证
          • 视美泰AI龙虾一键部署
        • 三、开发指南

          • ClawChips 架构与原理
          • SKILL 使用手册
          • LLM 推理
          • CNN 推理
          • 模型转换
          • SDK 参考

            • RKNN3 SDK 概述
            • RKNN3 Toolkit 安装与使用
            • RKLLM
        • 四、资料下载

          • 资料下载
        • 五、常见问题

          • 常见问题
    • 核心板

      • C-3568BQ

        • 简介

          • C-3568BQ 简介
      • C-3588LQ

        • 简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 简介

          • C-K1BA 简介

第三章 UI组件介绍和实际应用(中)

本文将继续为您讲解 ArkUI 框架中的常用组件和动画功能,包括文本组件、切换组件、滑动条组件以及动画组件。通过清晰的概念讲解和实战示例,帮助初学者快速掌握这些功能的用法,并在实际开发中灵活运用。

1. 文本组件

文本组件 是用于显示一段文本的基础组件,同时支持丰富的样式和布局配置,还可以包含 Span、ImageSpan 等子组件。

1.1 文本组件的定义与属性

接口:

	Text(content?: string | Resource, options?: TextOptions)

属性说明:

  • content:显示的文本内容。
  • 样式设置:可以通过 .style() 方法为文本指定对齐方式、字体大小、边框、填充等样式。

1.2 使用示例

content:要显示的文本内容,一个简单的例子如下:

	// xxx.ets
    @Extend(Text)
    function style(TextAlign: TextAlign) {
    .textAlign(TextAlign)
    .fontSize(12)
    .border({ width: 1 })
    .padding(10)
    .width('100%')
    }

    @Entry
    @Component
    struct TextExample1 {
    build() {
        Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Start, justifyContent: FlexAlign.SpaceBetween }) {
        // 文本水平方向对齐方式设置
        // 单行文本
        Text('textAlign').fontSize(9).fontColor(0xCCCCCC)
        Text('TextAlign set to Center.')
            .style(TextAlign.Center)
        Text('TextAlign set to Start.')
            .style(TextAlign.Start)
        Text('TextAlign set to End.')
            .style(TextAlign.End)

        // 多行文本
        Text('This is the text content with textAlign set to Center.')
            .style(TextAlign.Center)
        Text('This is the text content with textAlign set to Start.')
            .style(TextAlign.Start)
        Text('This is the text content with textAlign set to End.')
            .style(TextAlign.End)


        // 文本超长时显示方式
        Text('TextOverflow+maxLines').fontSize(9).fontColor(0xCCCCCC)
        // 超出maxLines截断内容展示
        Text('This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content. This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.')
            .textOverflow({ overflow: TextOverflow.Clip })
            .maxLines(1)
            .style(TextAlign.Start)

        // 超出maxLines展示省略号
        Text('This is set textOverflow to Ellipsis text content This is set textOverflow to Ellipsis text content.')
            .textOverflow({ overflow: TextOverflow.Ellipsis })
            .maxLines(1)
            .style(TextAlign.Start)

        Text('lineHeight').fontSize(9).fontColor(0xCCCCCC)
        Text('This is the text with the line height set. This is the text with the line height set.')
            .style(TextAlign.Start)
        Text('This is the text with the line height set. This is the text with the line height set.')
            .style(TextAlign.Start)
            .lineHeight(20)
            }.height(600).width(340).padding({ left: 35, right: 35, top: 35 })
        }
    }

2. Toggle组件

组件提供勾选框样式、状态按钮样式及开关样式。仅当ToggleType为Button时可包含子组件。

2.1 定义与参数

	Toggle(options: { type: ToggleType, isOn?: boolean })

参数说明:

  • type:切换类型,如 Switch(开关)、Checkbox(复选框)、Button(按钮)。
  • isOn:当前状态(true 或 false)。

2.2 使用实例

一个简单的例子如下:

	// xxx.ets
    @Entry
    @Component
    struct ToggleExample {
    build() {
        Column({ space: 10 }) {
        Text('type: Switch').fontSize(12).fontColor(0xcccccc).width('90%')
        Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
            Toggle({ type: ToggleType.Switch, isOn: false })
            .selectedColor('#007DFF')
            .switchPointColor('#FFFFFF')
            .onChange((isOn: boolean) => {
                console.info('Component status:' + isOn)
            })

            Toggle({ type: ToggleType.Switch, isOn: true })
            .selectedColor('#007DFF')
            .switchPointColor('#FFFFFF')
            .onChange((isOn: boolean) => {
                console.info('Component status:' + isOn)
            })
        }

        Text('type: Checkbox').fontSize(12).fontColor(0xcccccc).width('90%')
        Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
            Toggle({ type: ToggleType.Checkbox, isOn: false })
            .size({ width: 20, height: 20 })
            .selectedColor('#007DFF')
            .onChange((isOn: boolean) => {
                console.info('Component status:' + isOn)
            })

            Toggle({ type: ToggleType.Checkbox, isOn: true })
            .size({ width: 20, height: 20 })
            .selectedColor('#007DFF')
            .onChange((isOn: boolean) => {
                console.info('Component status:' + isOn)
            })
        }

        Text('type: Button').fontSize(12).fontColor(0xcccccc).width('90%')
        Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
            Toggle({ type: ToggleType.Button, isOn: false }) {
            Text('status button').fontColor('#182431').fontSize(12)
            }.width(106)
            .selectedColor('rgba(0,125,255,0.20)')
            .onChange((isOn: boolean) => {
            console.info('Component status:' + isOn)
            })

            Toggle({ type: ToggleType.Button, isOn: true }) {
            Text('status button').fontColor('#182431').fontSize(12)
            }.width(106)
            .selectedColor('rgba(0,125,255,0.20)')
            .onChange((isOn: boolean) => {
            console.info('Component status:' + isOn)
            })
          }
        }.width('100%').padding(24)
     }
    }

3. 滑动条组件

滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。

3.1 定义与参数

接口:

    Slider(options?: SliderOptions)

参数说明:

  • value:当前滑动值(支持双向绑定)。
  • min / max:滑动条的最小值和最大值。
  • step:滑动步长。
  • 样式:支持 OutSet(外置样式)和 InSet(内嵌样式)。

3.2 使用示例

    // xxx.ets
    @Entry
    @Component
    struct SliderExample {
    @State outSetValueOne: number = 40
    @State inSetValueOne: number = 40
    @State noneValueOne: number = 40
    @State outSetValueTwo: number = 40
    @State inSetValueTwo: number = 40
    @State vOutSetValueOne: number = 40
    @State vInSetValueOne: number = 40
    @State vOutSetValueTwo: number = 40
    @State vInSetValueTwo: number = 40

    build() {
        Column({ space: 8 }) {
        Text('outset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
        Row() {
            Slider({
            value: this.outSetValueOne,
            min: 0,
            max: 100,
            style: SliderStyle.OutSet
            })
            .showTips(true)
            .onChange((value: number, mode: SliderChangeMode) => {
                this.outSetValueOne = value
                console.info('value:' + value + 'mode:' + mode.toString())
            })
            // toFixed(0)将滑动条返回值处理为整数精度
            Text(this.outSetValueOne.toFixed(0)).fontSize(12)
        }
        .width('80%')
        Row() {
            Slider({
            value: this.outSetValueTwo,
            step: 10,
            style: SliderStyle.OutSet
            })
            .showSteps(true)
            .onChange((value: number, mode: SliderChangeMode) => {
				this.outSetValueTwo = value
				console.info('value:' + value + 'mode:' + mode.toString())
            })
            Text(this.outSetValueTwo.toFixed(0)).fontSize(12)
        }
        .width('80%')

        Text('inset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
        Row() {
            Slider({
            value: this.inSetValueOne,
            min: 0,
            max: 100,
            style: SliderStyle.InSet
            })
            .blockColor('#191970')
            .trackColor('#ADD8E6')
            .selectedColor('#4169E1')
            .showTips(true)
            .onChange((value: number, mode: SliderChangeMode) => {
                this.inSetValueOne = value
                console.info('value:' + value + 'mode:' + mode.toString())
            })
            Text(this.inSetValueOne.toFixed(0)).fontSize(12)
        }
        .width('80%')
        Row() {
            Slider({
            value: this.inSetValueTwo,
            step: 10,
            style: SliderStyle.InSet
            })
            .blockColor('#191970')
            .trackColor('#ADD8E6')
            .selectedColor('#4169E1')
            .showSteps(true)
            .onChange((value: number, mode: SliderChangeMode) => {
                this.inSetValueTwo = value
                console.info('value:' + value + 'mode:' + mode.toString())
            })
            Text(this.inSetValueTwo.toFixed(0)).fontSize(12)
        }
        .width('80%')

        Text('none slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
        Row() {
            Slider({
            value: this.noneValueOne,
            min: 0,
            max: 100,
            style: SliderStyle.NONE
            })
            .blockColor('#191970')
            .trackColor('#ADD8E6')
            .selectedColor('#4169E1')
            .showTips(true)
            .onChange((value: number, mode: SliderChangeMode) => {
                this.noneValueOne = value
                console.info('value:' + value + 'mode:' + mode.toString())
            })
            Text(this.noneValueOne.toFixed(0)).fontSize(12)
        }
        .width('80%')

        Row() {
			Column() {
			Text('vertical outset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
			Row() {
				Text().width('10%')
                Slider({
                value: this.vOutSetValueOne,
                style: SliderStyle.OutSet,
                direction: Axis.Vertical
                })
                .blockColor('#191970')
                .trackColor('#ADD8E6')
                .selectedColor('#4169E1')
                .showTips(true)
                .onChange((value: number, mode: SliderChangeMode) => {
                    this.vOutSetValueOne = value
                    console.info('value:' + value + 'mode:' + mode.toString())
                })
                Slider({
                value: this.vOutSetValueTwo,
                step: 10,
                style: SliderStyle.OutSet,
                direction: Axis.Vertical
                })
                .blockColor('#191970')
                .trackColor('#ADD8E6')
                .selectedColor('#4169E1')
                .showSteps(true)
                .onChange((value: number, mode: SliderChangeMode) => {
                    this.vOutSetValueTwo = value
                    console.info('value:' + value + 'mode:' + mode.toString())
                })
            }
            }.width('50%').height(300)

            Column() {
            Text('vertical inset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
            Row() {
                Slider({
                value: this.vInSetValueOne,
                style: SliderStyle.InSet,
                direction: Axis.Vertical,
                reverse: true // 竖向的Slider默认是上端是min值,下端是max值,因此想要从下往上滑动,需要设置reverse为true
                })
                .showTips(true)
                .onChange((value: number, mode: SliderChangeMode) => {
					this.vInSetValueOne = value
                    console.info('value:' + value + 'mode:' + mode.toString())
                })
				Slider({
                value: this.vInSetValueTwo,
                step: 10,
                style: SliderStyle.InSet,
                direction: Axis.Vertical,
                reverse: true
                })
                .showSteps(true)
                .onChange((value: number, mode: SliderChangeMode) => {
                    this.vInSetValueTwo = value
                    console.info('value:' + value + 'mode:' + mode.toString())
                })
            }
            }.width('50%').height(300)
        }
         }.width('100%')
    }
    }

4. 动画组件

在现代UI界面设计中,动画扮演着举足轻重的角色。它不仅能够提升界面的直观性,还能显著改善应用程序的外观和用户体验。ArkUI开发框架深知动画的重要性,为开发者提供了丰富的动画能力,如属性动画、转场动画及自定义动画等。接下来,本文将详细介绍这些动画类型,并通过实战演示如何在ArkUI中使用它们。

4.1 动画介绍

4.1.1 属性动画

属性动画允许开发者对UI元素的属性(如位置、大小、颜色等)进行动态改变,从而创建出丰富的动画效果。在ArkUI中,属性动画可以通过设置动画属性、持续时间、延迟时间等参数来定制。

4.1.2 转场动画

转场动画主要用于页面之间的切换效果。它能够使界面在切换时更加流畅,提升用户体验。ArkUI提供了多种转场动画效果,如淡入淡出、滑动等,开发者可以根据实际需求选择合适的动画效果。

4.1.3 自定义动画

除了属性动画和转场动画外,ArkUI还支持自定义动画。开发者可以通过编写代码来定义自己的动画效果,实现更加复杂和个性化的动画需求。

4.2 实战演示

接下来,我们将通过实战演示如何在ArkUI中使用这些动画能力。

4.2.1 属性动画实战

假设我们有一个按钮元素,想要在用户点击按钮时改变其颜色。我们可以使用属性动画来实现这一效果。首先,我们需要创建一个按钮元素,并为其添加点击事件监听器。然后,在点击事件触发时,我们使用属性动画来改变按钮的颜色。

    // 创建按钮元素
    Button button = new Button();
    button.setText("点击我");

    // 添加点击事件监听器
    button.setOnClickedListener(() -> {
        // 使用属性动画改变按钮颜色
        Animation animation = new Animation();
        animation.setProperty("backgroundColor", Color.RED, Color.BLUE);
        animation.setDuration(1000); // 设置动画持续时间
        animation.start(button); // 启动动画
    });

4.2.2 转场动画实战

假设我们有两个页面,想要在用户点击按钮时切换到另一个页面,并添加淡入淡出的转场动画效果。首先,我们需要创建两个页面元素,并为其添加按钮和点击事件监听器。然后,在点击事件触发时,我们使用转场动画来实现页面切换。

    // 创建两个页面元素
    Page page1 = new Page();
    Page page2 = new Page();

    // 添加按钮和点击事件监听器到page1
    Button button = new Button();
    button.setText("切换到页面2");
    page1.add(button);

    button.setOnClickedListener(() -> {
    // 使用转场动画切换到page2
    Transition transition = new Transition();
		transition.setType(TransitionType.FADE_IN_FADE_OUT); // 设置淡入淡出效果
        transition.start(page1, page2); // 启动转场动画
    });

4.2.3 自定义动画实战

假设我们想要创建一个自定义的动画效果,如让一个元素沿着特定路径移动。首先,我们需要定义一个动画路径。然后,我们使用自定义动画来实现元素沿着该路径移动的效果。

    // 创建动画路径
    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(100, 100);

    // 创建自定义动画
    CustomAnimation customAnimation = new CustomAnimation(path);
    customAnimation.setDuration(2000); // 设置动画持续时间

    // 获取要移动的元素并应用动画
    Element element = ...; // 假设已经有一个元素
    customAnimation.start(element); // 启动自定义动画

需要注意的是,以上代码示例仅用于演示如何在ArkUI中使用动画能力,并非完整的可运行代码。在实际开发中,开发者需要根据自己的需求来创建UI元素、设置动画参数等。综上所述,ArkUI为开发者提供了丰富的动画能力,使得在UI界面中创建出各种动画效果变得更加简单和直观。通过合理使用这些动画能力,开发者可以显著提升应用程序的外观和用户体验。


在 GitHub 上编辑此页
上次更新:
贡献者: zwhuang
Prev
第二章 UI组件介绍和实际应用(上)
Next
第四章 UI组件介绍和实际应用(下)