「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

简介: 本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择,或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。

本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择,或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。

20241126_230826.gif


关键词
  • UI互动应用
  • 颜色选择器
  • 状态管理
  • 用户输入
  • 界面动态更新

一、功能说明

颜色选择器应用允许用户选择一个颜色,并实时将其应用到界面背景中。用户既可以从预设颜色中选择,也可以输入颜色代码进行自定义。


二、所需组件

  • @Entry@Component 装饰器
  • Column 布局组件
  • TextInput 组件用于用户输入自定义颜色代码
  • Text 组件用于显示提示信息
  • Button 组件用于选择预设颜色
  • Image 组件用于装饰界面
  • @State 修饰符用于状态管理

三、项目结构

  • 项目名称ColorPickerApp
  • 自定义组件名称ColorPickerPage
  • 代码文件ColorPickerPage.etsIndex.ets

四、代码实现

// 文件名:ColorPickerPage.ets

@Component
export struct ColorPickerPage {
   
  @State selectedColor: string = '#FFFFFF'; // 默认背景色为白色
  @State customColor: string = ''; // 用户输入的自定义颜色

  build() {
   
    Column({
    space: 20 }) {
   
      // 显示当前背景色
      Text(`当前背景色: ${
     this.selectedColor}`)
        .fontSize(18)
        .fontWeight(FontWeight.Bold)
        .alignSelf(ItemAlign.Center);

      // 显示猫咪图片
      Image($r('app.media.cat'))
        .width(85)
        .height(100)
        .borderRadius(5)
        .alignSelf(ItemAlign.Center);

      // 预设颜色选择器
      Column({
    space: 10 }) {
   
        Button('选择 #FF5733')
          .backgroundColor('#FF5733')
          .fontColor(Color.White)
          .onClick(() => this.selectedColor = '#FF5733')
          .width('80%')
          .alignSelf(ItemAlign.Center);

        Button('选择 #33FF57')
          .backgroundColor('#33FF57')
          .fontColor(Color.White)
          .onClick(() => this.selectedColor = '#33FF57')
          .width('80%')
          .alignSelf(ItemAlign.Center);

        Button('选择 #3357FF')
          .backgroundColor('#3357FF')
          .fontColor(Color.White)
          .onClick(() => this.selectedColor = '#3357FF')
          .width('80%')
          .alignSelf(ItemAlign.Center);

        Button('选择 #F1C40F')
          .backgroundColor('#F1C40F')
          .fontColor(Color.White)
          .onClick(() => this.selectedColor = '#F1C40F')
          .width('80%')
          .alignSelf(ItemAlign.Center);
      }

      // 用户输入颜色代码
      TextInput({
    placeholder: '输入自定义颜色代码 (如 #123ABC)' })
        .type(InputType.Normal) // 正确的输入类型
        .onChange((value: string) => this.customColor = value)
        .width('80%')
        .alignSelf(ItemAlign.Center);

      // 应用自定义颜色
      Button('应用自定义颜色')
        .onClick(() => {
   
          if (this.validateColor(this.customColor)) {
   
            this.selectedColor = this.customColor;
          } else {
   
            this.selectedColor = '#FFFFFF'; // 无效时回退为白色
          }
        })
        .fontSize(18)
        .backgroundColor(Color.Gray)
        .fontColor(Color.White)
        .width('50%')
        .alignSelf(ItemAlign.Center);
    }
    .padding(20)
    .width('100%')
    .height('100%')
    .backgroundColor(this.selectedColor)
    .alignItems(HorizontalAlign.Center);
  }

  // 验证颜色代码是否合法
  private validateColor(color: string): boolean {
   
    const hexColorPattern = /^#([0-9A-Fa-f]{6}|[0-9A-Fa-f]{3})$/;
    return hexColorPattern.test(color);
  }
}
// 文件名:Index.ets

import {
    ColorPickerPage } from './ColorPickerPage';

@Entry
@Component
struct Index {
   
  build() {
   
    Column() {
   
      ColorPickerPage() // 调用颜色选择器页面
    }
    .padding(20)
  }
}

效果示例:用户可以通过点击预设颜色按钮或输入颜色代码动态更改界面背景色。
示例中,选择绿色背景后,界面动态更新。

20241126_230826.gif


五、代码解读

  • 状态管理@State selectedColor@State customColor 用于存储当前选定颜色和用户输入的颜色。
  • 预设颜色按钮:通过动态生成按钮列表实现多种颜色选择。
  • 输入颜色代码验证:通过正则表达式检查用户输入是否合法。
  • 动态背景更新:实时根据用户选择的颜色更新背景颜色。

六、优化建议

  1. 增强交互体验:在用户选择颜色时显示渐变过渡动画。
  2. 颜色历史记录:保存最近选择的颜色,便于用户快速使用。
  3. 支持更多格式:扩展输入功能,支持 RGB 或 HSL 格式的颜色代码。

七、相关知识点


小结

通过颜色选择器的实现,用户能够体验状态管理、用户输入验证以及动态界面更新的实现方式。这个应用是一个简单但实用的 UI 交互示例。


下一篇预告

在下一篇「UI互动应用篇12 - 简易日历」中,我们将探索如何创建一个简易日历,显示当前月份的日期,并支持选择特定日期的功能。


上一篇: 「Mac畅玩鸿蒙与硬件33」UI互动应用篇10 - 数字猜谜游戏

下一篇: 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=311
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


目录
相关文章
|
1天前
「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
本篇将带你实现一个简易日历应用,显示当前月份的日期,并支持选择特定日期的功能。用户可以通过点击日期高亮选中,还可以切换上下月份,体验动态界面的交互效果。
26 12
「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
|
7天前
|
UED
「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
本篇将带领你实现一个趣味十足的互动应用,用户点击按钮时猫会在一排灯之间移动,猫所在的位置灯会亮起(on),其余灯会熄灭(off)。应用会根据用户的操作动态更新灯光状态和文本提示当前亮灯的位置,是掌握状态管理和组件动态渲染的良好实践。
49 15
「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用
|
5天前
「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用
本篇将带你实现一个番茄钟倒计时应用,用户可以设置专注时间和休息时间的时长,点击“开始专注”或“开始休息”按钮启动计时,应用会在倒计时结束时进行提醒。番茄钟应用对于管理时间、提升工作效率非常有帮助,并且还会加入猫咪图片作为界面装饰,让体验更加有趣。
52 8
「Mac畅玩鸿蒙与硬件32」UI互动应用篇9 - 番茄钟倒计时应用
|
10天前
|
前端开发 搜索推荐 开发者
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。
52 12
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas 组件自定义绘图
|
10天前
|
搜索推荐 前端开发 开发者
「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
自定义动画让开发者可以设计更加个性化和复杂的动画效果,适合表现独特的界面元素。鸿蒙提供了丰富的工具,支持通过自定义路径和时间控制来创建复杂的动画运动。本篇将带你学习如何通过自定义动画实现更多样化的效果。
65 11
「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
|
10天前
|
UED 开发者
「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制
高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。
54 12
「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制
|
8天前
「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现
本篇将带领你实现一个实用的计时器应用,用户可以启动、暂停或重置计时器。该项目将涉及时间控制、状态管理以及按钮交互,是掌握鸿蒙应用开发的重要步骤。
47 7
「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现
|
8天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
在鸿蒙应用中,Canvas 组件可以实现丰富的动态效果,适合用于动画和实时更新的场景。本篇将介绍如何在 Canvas 中实现动画循环、动态进度条、旋转和缩放动画,以及性能优化策略。
36 6
「Mac畅玩鸿蒙与硬件22」鸿蒙UI组件篇12 - Canvas 组件的动态进阶应用
|
8天前
|
UED
「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
本篇将带领你实现一个互动性十足的灯光控制小项目,用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互,是学习鸿蒙应用开发的重要基础。
33 5
「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目
|
8天前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。
31 5
「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用