首页 > 其他分享 >「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具

「Mac畅玩鸿蒙与硬件45」UI互动应用篇22 - 评分统计工具

时间:2024-12-18 22:29:09浏览次数:9  
标签:选项 畅玩 22 示例 评分 45 number 按钮 组件

本篇将带你实现一个评分统计工具,用户可以对多个选项进行评分。应用会实时更新每个选项的评分结果,并统计平均分。这一功能适合用于问卷调查或评分统计的场景。
在这里插入图片描述


关键词
  • UI互动应用
  • 评分统计
  • 状态管理
  • 数据处理
  • 多目标评分

一、功能说明

评分统计工具允许用户对多个选项(如电影、餐厅或商品)分别评分,应用实时显示每个选项的评分,并计算和显示所有选项的平均评分。


二、所需组件
  • @Entry@Component 装饰器
  • ColumnRow 布局组件
  • Text 组件用于显示评分结果
  • Button 组件用于评分选择
  • @State 修饰符用于状态管理
  • Image 组件用于展示示例图片

三、项目结构
  • 项目名称RatingStatisticsApp
  • 自定义组件名称RatingStatisticsPage
  • 代码文件RatingStatisticsPage.etsIndex.ets

四、代码实现
// 文件名:RatingStatisticsPage.ets

@Component
export struct RatingStatisticsPage {
  @State ratings: number[] = [0, 0, 0]; // 每个选项的评分
  options: string[] = ['选项 1', '选项 2', '选项 3']; // 选项列表

  build() {
    Column({ space: 20 }) {
      // 示例图片
      Image($r('app.media.cat'))
        .width(226)
        .height(266)
        .alignSelf(ItemAlign.Center);

      // 显示评分选项及评分按钮
      ForEach(this.options, (option: string, index: number) => {
        Column({ space: 10 }) {
          Text(`${option} 当前评分: ${this.ratings[index]} / 5`)
            .fontSize(20)
            .alignSelf(ItemAlign.Start);

          Row({ space: 5 }) {
            ForEach([1, 2, 3, 4, 5], (score: number) => {
              Button(`${score}`)
                .fontSize(18)
                .backgroundColor(this.getButtonColor(index, score)) // 动态设置按钮背景颜色
                .fontColor(Color.White)
                .onClick(() => {
                  this.setRating(index, score);
                });
            });
          }
        };
      });

      // 显示平均评分
      Text(`平均评分: ${this.calculateAverage().toFixed(1)} / 5`)
        .fontSize(22)
        .fontWeight(FontWeight.Bold)
        .alignSelf(ItemAlign.Center);
    }
    .padding(20)
    .width('100%')
    .height('100%');
  }

  // 设置评分
  private setRating(index: number, rating: number) {
    this.ratings[index] = rating;
  }

  // 动态获取按钮颜色
  private getButtonColor(index: number, score: number): Color {
    return this.ratings[index] >= score ? Color.Pink : Color.Gray; // 选中评分及其以下的按钮变色
  }

  // 计算平均评分
  private calculateAverage(): number {
    const total = this.ratings.reduce((sum, rating) => sum + rating, 0);
    return total / this.ratings.length;
  }
}
// 文件名:Index.ets

import { RatingStatisticsPage } from './RatingStatisticsPage';

@Entry
@Component
struct Index {
  build() {
    Column() {
      RatingStatisticsPage() // 调用评分统计工具页面
    }
    .padding(20)
  }
}

效果示例:用户可以为每个选项打分,评分实时更新,并计算和显示平均评分。评分按钮选中后及以下的按钮会变为粉色,其余保持默认灰色。界面上还展示了示例图片。

在这里插入图片描述


五、代码解读
  1. 状态管理

    • 通过 @State 修饰符管理 ratings 数组,实现评分的实时更新。
  2. 评分按钮颜色动态变化

    • 使用 getButtonColor 方法判断当前评分按钮的背景颜色。
    • 被选中及以下的按钮会变为粉色,未选中的保持默认灰色
  3. 动态布局

    • 使用 ForEach 遍历 options 和评分值,动态生成评分按钮及显示当前评分的文本。
  4. 平均评分计算

    • 通过 reduce 方法对所有选项的评分求和,计算出平均值。
  5. 示例图片

    • 使用 Image($r('app.media.cat')) 添加示例图片,增强界面视觉效果。

六、优化建议
  1. 动态选项支持:允许用户自定义添加评分选项,使工具更具通用性。
  2. 评分结果导出:添加数据导出功能,方便用于问卷分析和统计。
  3. 误触提示:增加确认提示,避免用户误触按钮导致评分变化。

七、效果展示
  • 评分按钮交互:选中的评分按钮及其以下按钮背景颜色变为粉色,其余保持灰色
  • 平均评分展示:实时更新评分后,自动计算并显示平均评分。
  • 示例图片展示:页面展示了一张示例图片,提升界面视觉体验。

八、相关知识点

小结

本篇教程通过评分统计工具的实现,展示了状态管理、动态布局及数据计算的应用。用户可以体验实时评分更新及平均分计算,适用于问卷调查和评分统计场景。


下一篇预告

在下一篇「UI互动应用篇23 - 自定义天气预报组件」中,我们将探讨如何通过静态数据和动态交互实现一个简易天气预报组件,包括城市选择、天气图标展示和温度调节功能。


上一篇: 「Mac畅玩鸿蒙与硬件44」UI互动应用篇21 - 随机励志语录生成器
下一篇: 「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件

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


标签:选项,畅玩,22,示例,评分,45,number,按钮,组件
From: https://blog.csdn.net/weixin_44217688/article/details/144547350

相关文章

  • 20222426 2021-2022-2 《网络与系统攻防技术》实验八实验报告
    202224262021-2022-2《网络与系统攻防技术》实验八实验报告1.实验内容(1)Web前端HTML能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。数据传递方式:GET方法的参数包含在URL中,而POST方法的参数则放在请求体中。安全性:虽然POST方法在数据......
  • 11.22
    软件设计                 石家庄铁道大学信息学院 实验21:观察者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解观察者模式的动机,掌握该模式的结构;2、能够利用观察者模式解决实际问题。 [实验任务一]:股票提醒当股票的价格上涨或......
  • Springboot家私导购系统5z229(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,家私类别,家私信息开题报告内容一、课题背景与意义随着互联网技术的飞速发展和电子商务的普及,消费者的购物习惯发生了显著变化。特别是在家居家具领域,消费......
  • 【python高级】322-Python装饰器
    闭包的作用就是为了编写装饰器装饰器的本质就是一个闭包装饰器定义就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。装饰器的功能特点:①不修改已有函数的源代码②不修改已有函数的调用方式③给已有函数增加额外的功能闭包这么编程装饰器的?装饰器的雏形......
  • hhdb客户端介绍(22)
    产品可维护性与扩展性介绍代码结构与模块化描述客户端代码的组织结构,以及模块化设计的原则和方法。客户端拥有清晰、简洁且模块化的代码结构,每个模块负责特定的功能或组件,例如数据库连接模块、查询执行模块、用户界面模块等,这些模块之间通过接口或API进行通信,以实现功能之间的......
  • Crashlytics:Crashlytics自动化测试集成_2024-07-23_15-36-45.Tex
    Crashlytics:Crashlytics自动化测试集成Crashlytics自动化测试集成Crashlytics概述Crashlytics是Firebase提供的一款强大的错误报告工具,它能够帮助开发者监控和分析应用的崩溃情况,提供详细的崩溃报告,包括崩溃发生的时间、地点、设备信息、操作系统版本等,从而帮助开发者快......
  • 20241227
    实验一:数据准备与模型评估 一、实验目的熟悉Python的基本操作,掌握对数据集的读写实现、对模型性能的评估实现的能力;加深对训练集、测试集、N折交叉验证、模型评估标准的理解。 二、实验内容(1)利用pandas库从本地读取iris数据集;(2)从scikit-learn库中直接加载iris......
  • 在 Windows Server 2022 中配置和使用 iSCSI 服务器是一项常见的任务,尤其是在虚拟化、
     在WindowsServer2022中配置和使用iSCSI服务器是一项常见的任务,尤其是在虚拟化、存储管理和备份等场景中。以下是一个初级使用教程的大纲,帮助你从头开始配置和使用iSCSI服务器。WindowsServer2022iSCSI服务器初级使用教程大纲1. 介绍与概念iSCSI概述什么是......
  • 11.22 每日总结(单例模式)
    今天学习单例模式单例模式定义:确保一个类最多只有一个实例,并提供一个全局访问点单例模式可以分为两种:预加载和懒加载 预加载顾名思义,就是预先加载。再进一步解释就是还没有使用该单例对象,但是,该单例对象就已经被加载到内存了。publicclassPreloadSingleton{publi......
  • 220kV变电站典型二次回路解析—220kV保护装置的二次回路
    1.保护装置直流电源回路符号说明:1n:931保护装置1K:保护装置直流电源回路说明:(1)保护装置正电开入:正电从+KM→ZD1(第一套保护端子排)→1K-3(线路保护屏I空开上桩头)→1K-4(线路保护屏I空开下桩头)→1QD1(第一套保护端子排)→P110(931保护装置)(2)保护装置负电开入:P111(931保护装置)→1......