首页 > 其他分享 >「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

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

时间:2024-11-28 21:28:36浏览次数:9  
标签:11 颜色 Center 自定义 selectedColor 颜色代码 畅玩 选择器 输入

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

在这里插入图片描述

关键词
  • 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)
  }
}

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

在这里插入图片描述


五、代码解读
  • 状态管理@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
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


标签:11,颜色,Center,自定义,selectedColor,颜色代码,畅玩,选择器,输入
From: https://blog.csdn.net/weixin_44217688/article/details/144120933

相关文章

  • 2024.11.28周四
    2024.11.28周四Q1.1200给定a,b。构造一数组,满足平均值为a,中位数为b。Q2.1300给定4个数字,输出1~5中未出现的数字。Q3.1500给定一数组,每次操作你可以选择一个元素ai在数组右边添加i-1个0。问任意操作数组长度的最大值。A1.9mins考虑等差数列,3个元素便能构造出来......
  • 软件设计:实验11:装饰模式
    实验11:装饰模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解装饰模式的动机,掌握该模式的结构;2、能够利用装饰模式解决实际问题。 [实验任务一]:手机功能的升级用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而......
  • 20241127
    软件设计                 石家庄铁道大学信息学院 实验25:访问者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解访问者模式的动机,掌握该模式的结构;2、能够利用访问者模式法解决实际问题。 [实验任务一]:打包员在我们课堂上的“购......
  • 20241126
    软件设计                 石家庄铁道大学信息学院 实验24:模板方法模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解模板方法模式的动机,掌握该模式的结构;2、能够利用模板方法模式解决实际问题。 [实验任务一]:数据库连接对数据库的......
  • 1179 Chemical Equation(搜索 + 回溯)
     先把各产物对应的公式按题面要求的从小到大进行排序(丢set里让他自己排序就行),搜索条件有两个:1.每个原料最多使用一次2.每个产物都要被生成排序后,搜索得到的第一个解就是最优解。1#include<bits/stdc++.h>2usingnamespacestd;3intn,m,k;4vector<str......
  • .NET周刊【11月第4期 2024-11-24】
    国内文章C#入门深度学习:万字长文讲解微积分和梯度下降https://www.cnblogs.com/whuanle/p/18551532这篇文章主要介绍了使用C#进行深度学习的方法,特别是微积分在此领域的应用。作者简要讲解了极限、导数等基本概念,并展示了如何在C#中实现这些数学运算,例如将一个极大的数表......
  • 11.28 模拟赛
    总结T1读完题就会了。感觉没什么坑直接写。10min过大样例。没啥好拍的就不拍了。T2。感觉不难啊,这种模拟Kruskal的题都做一堆了。想。谔谔正解会不了一点。写个乱搞,看看能不能过大样例。一开始是没过的,因为少写了一种情况。很久之后意识到改过来发现大样例过了!然后没对拍......
  • 蓝桥3511飞机降落
    样例输入230100101010100220301020101020201020样例输出YESNO思路:具体来说,对于每架飞机,有起飞时间(t)、降落时间限制(d)和飞行时长(l)等信息,代码要判断能否按照一定规则安排这些飞机的起降顺序,使得所有飞机都能在其降落时间限制内完成降落。代码展示:#incl......
  • 1103 欧拉函数
    //1103欧拉函数.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/489输入T,一共T组数据,每组一个数n,输出它的欧拉函数φ(n)。输入格式第一行一个数字T。接下来T行,每行一个数字n。输出格式一共T行,每行一......
  • 2024.11.[~, 28]训练记录
    好,今天是noip2024前最后一次模拟。但是我参加不了noip。还是认真参加了模拟赛。自主复习就写训练记录吧。落下很多天了。今天的题疑似有点难订正了。那就先写今天的。11.28noip模拟今天的考试时间为了全真对标特意推迟了半个小时,写到最后还是有点困了。毕竟平常一点钟睡午......