HarmonyOS NEXT应用开发—投票动效实现案例

介绍

本示例介绍使用绘制组件中的Polygon组件配合使用显式动画以及borderRadius实现投票pk组件。

效果预览图

使用说明

  1. 加载完成后会有一个胶囊块被切割成两个等大的图形来作为投票的两个选项,中间由PK两字分隔开
  2. 点击左边选项,两个图形会随着选择人数的比例同步变化,且有变化的动画效果,PK两字消失,图形间间隙变小,选项颜色变淡, 分别在两个图形上显示选择对应选项的人数比例,下方提示文字也会同步改成已选择的选项,且显示总参与投票人数

实现思路

  1. 使用Column绘制胶囊块图形,为实现胶囊块的切割效果以及投票后的比例变换,这里使用两个Colum分别绘制两个半个胶囊块拼接而成。源码参考VotingComponent.ets。
// 使用Column绘制出胶囊块
Column()// 设置左上和左下两个角为圆角.borderRadius({topLeft: $r("app.integer.fillet_radius"),bottomLeft: $r("app.integer.fillet_radius"),topRight: $r("app.integer.right_angle_radius"),bottomRight: $r("app.integer.right_angle_radius")}).backgroundColor(Constants.LEFT_COLOR).opacity(this.fillOpacity) // 动态变化透明度.width(this.leftOptionWidth) // 选项宽度.height($r("app.integer.option_background_height"))
  1. 使用绘制组件中的Polygon实现胶囊块中间被分割的效果。中间的间隙有两个状态:1、未投票时是个宽度比较大的平行四边形,且有PK两字;2、投票后是个宽度很窄的平行四边形,且PK两字消失。源码参考VotingComponent.ets。
  // TODO:知识点3:使用绘制组件Polygon投票组件中间的平行四边形空隙效果Polygon().points(this.points).fill(Color.White).stroke(Color.White).antiAlias(true).width($r("app.integer.polygon_width")).height($r("app.integer.polygon_height"))// 点击前,空隙宽度稍微大一些,且其中有PK两字if (!this.isClick) {Text() {Span($r("app.string.mid_text_left")).fontColor(Constants.LEFT_COLOR)Span($r("app.string.mid_text_right")).fontColor(Constants.RIGHT_COLOR)}.fontSize($r("app.integer.mid_text_font_size")).fontStyle(FontStyle.Italic).fontWeight(Constants.MID_TEXT_FONT_WEIGHT).textAlign(TextAlign.Center)}
}
// TODO:知识点4:因为Polygon是以一个矩形框为基准来绘制的,因此会受到这个矩形框的影响,使用position以及markAnchor来偏移,以抵消前述影响
.position({ x: this.leftOptionWidth })
.markAnchor({ x: $r("app.string.mid_gap_mark_anchor") })
  1. 计算投票比例作为左右图形宽度,且定义动画效果。源码参考VotingComponent.ets。
  // 定义动画animateParam: AnimateParam = {duration: Constants.ANIMATE_DURATION,curve: Curve.EaseOut}/*** 投票后改变属性** @param option 投了左边还是右边*/changeState(option: string) {// 投票后将点击状态置为已点击,实现投票只能投一次的效果this.isClick = true;// 左下角文字提示投票已选择的选项this.notice = '已选择"' + option + '"';// 投票后设置透明度,实现颜色变浅的效果this.fillOpacity = Constants.END_FILL_OPACITY;// 根据投票人数来计算选项两边的比例const leftOptionPercent: number = this.leftOptionChoose / (this.leftOptionChoose + this.rightOptionChoose) * Constants.PERCENTAGE;// TODO:知识点1:使用显式动画,只有在宽度变化时生效animateTo(this.animateParam, () => {this.leftOptionWidth = leftOptionPercent.toFixed(0) + '%';this.rightOptionWidth = (Constants.PERCENTAGE - leftOptionPercent).toFixed(0) + '%';this.points = Constants.END_POINTS;});}

高性能知识点

不涉及

工程结构&模块类型

votingcomponent                                        // har类型
|---constants
|   |---Constants.ets                                 // 常量类
|---view
|   |---VotingComponent.ets                            // 视图层-投票组件页面 

模块依赖

本场景依赖了路由模块来注册路由。

参考资料

Polygon

animationTo

borderRadius

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

腾讯T10级高工技术,安卓全套VIP课程全网免费送:https://qr21.cn/D2k9D5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2080: [蓝桥杯2023初赛] 飞机降落

题目描述 N 架飞机准备降落到某个只有一条跑道的机场。 其中第 i 架飞机在 Ti 时刻到达机场上空,到达时它的剩余油料还可以继续盘旋 Di 个单位时间。 即它最早可以于 Ti 时刻开始降落,最晚可以于 Ti Di 时刻开始降落。 降落过程需要Li个单位时间。 一架…

Java城管智慧执法管理系统源码带APP

目录 一、系统概述 二、系统开发环境 三、功能模块 四、应用价值 1、提升案件办理效率 2、提升监管效能 3、提升行政执法水平 4、推进行政执法创新 一、系统概述 智慧城管系统是一个基于现代信息技术手段的综合管理平台,旨在通过强化信息获取自动化、监督管…

二分算法详、

二分的概念 二分算法:是用来在一个有序数组中查找一个元素的算法。时间复杂度O(log n) 二分的二段性 集合中的元素有存在分界线,给定条件可以将集合中的元素分为两部分,一部分满足条件,一部分不满足条件…

官宣!眉州东坡终生认养大熊猫“星星”

2024年03月19日,眉州东坡终生认养大熊猫“星星”签约仪式暨第八届有机川熊猫竹笋节在北京和重庆同时举行。眉州东坡董事长王刚先生、重庆动物园副处长殷毓中先生等嘉宾在重庆共同出席了此次认养仪式,重庆动物园向眉州东坡授予大熊猫终生认养证书,宣布星星正式加入眉州东坡大家庭…

Game of Nodes 16进8

KNIME 还可以用成这样? 是不是有点过分了。 Tableau, PowerBI 同学请绕行,我们讨论的不是同一个东西... 由于 Game of Nodes 没有公开题目,且各个小组赛的题目也是不一样的,在这里我们只能通过拼接图来猜想小组赛题目了。 有的解决方案我甚至…

Android源码阅读 SharedPreferences - 1

目录 前言 正文 SharedPreferences.java PreferenceManager.java ContextImpl.java 前言 由于笔者目前水平限制,表达能力有限,尽请见谅。 SharedPreferences提供了一种轻量级的数据存储方式,允许保存和获取简单的键值对。它适用于保存少…

中霖教育:一级建造师和一级造价师通过率高吗?

在建筑工业领域,一级建造师和一级造价工程师考试都是比较热门的考试,每年参加的人数都非常多,如果只备考一个的话,2024年选择哪项考试更为合适? 一建和一造的平均通过率均未超过10%,两者难度相近: 1. 一…

TCP粘包问题优化

TCP粘包问题是指在使用TCP协议进行数据传输时,由于TCP协议本身的特性,可能会导致多个数据包被粘在一起发送,或者在接收端接收到的数据包中包含了多个独立的数据包。这种情况可能会导致数据解析出错,从而影响应用程序的正常运行。 …

SpringBoot 中配置日期格式

SpringBoot 中配置日期格式 这个错误提示表明在尝试将一个字符串转换成 java.util.Date 类型时失败了,因为字符串的格式不符合预期的日期格式。在你的情况下,字符串 “2024-03-14 18:55:55” 似乎不符合默认的日期格式。 解决这个问题的方法之一是告诉…

力扣刷题---岛屿问题--c++

DFS:深度优先遍历:深度优先遍历是一种优先走到底、无路可走再回头的遍历方式 我们所熟悉的 DFS(深度优先搜索)问题通常是在树或者图结构上进行的。而我们今天要讨论的 DFS 问题,是在一种「网格」结构中进行的。岛屿问题…

源码部署LAMP架构

LAMP 文章目录 LAMP1. lamp简介2. web服务器工作流程2.1 cgi与fastcgi2.2 httpd与php结合的方式2.3 web工作流程 3. LAMP平台构建3.1 安装httpd3.2 安装mysql3.3 安装php3.4 验证 1. lamp简介 有了前面学习的知识的铺垫,今天可以来学习下第一个常用的web架构了。 …

【基于HTML5的网页设计及应用】——动态添加下拉菜单

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

TiDB分布式关系型数据库

TiDB分布式关系型数据库 什么是TiDBTiDB结构TiDB的热点问题 什么是TiDB TiDB 是一个开源的分布式关系型数据库,由 PingCAP 公司主导开发。它的设计目标是提供水平可扩展的高性能分布式事务数据库,同时保持与 MySQL 协议的兼容性和事务的 ACID&#xff0…

什么是增强型SSL证书?购买一张需要多少钱?

增强型SSL证书是一种提供更高级别安全验证与用户信任度的网络安全工具,也被称为EV证书。相较于DV(域名验证)和OV(组织验证)证书,它通过严格的身份核实流程确保网站所有者的合法性和真实性。 首先&#xff0…

vue事件绑定引发的性能问题

Vue事件绑定中,为每个动态创建的元素都基于addEventListener做了事件绑定,可能会导致性能问题,因为在绑定的方法中需要用到每次循环的信息,会创建多个闭包。 因为在循环中使用事件绑定会导致大量的事件监听器被创建,这…

【C++】string 类---字符判断与大小写转换(超详细解析!)

目录 一、string 类的介绍 二、字符大小写转换与判断常用函数 💦 字符大小写判断 ① isalpha() ② isalnum() ③ isdigit() ④ islower() ⑤ isupper() 💦 字符大小写转换 ① tolower() ✨方法一: ✨方法二: ② toupper() ✨方…

【NLP8-Transformer】

Transformer 1、优势 相比之前占领市场的LSTM和GRU模型,Transformer有两个显著优势 1、Transformer能够利用分布式GPU进行并行训练,提升模型训练效率 2、在分析预测更长的文本时,捕捉间隔较长的语义关联效果更好。 2、Transformer模型的…

【MySQL】MySQL视图

文章目录 一、视图的基本使用1.创建视图2.修改了视图,对基表数据有影响3.修改了基表,对视图有影响4.删除视图 二、视图规则和限制 一、视图的基本使用 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称…

【springboot】@SpringBootApplication 加载原理解析

从何处放入 AutoConfigurationImportSelector.selectImports AbstractApplicationContext.refresh AbstractApplicationContext.invokeBeanFactoryPostProcessors PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 此处一个关键信息 只有BeanDefinition…

Android11 HID开发系统源码配置

# RK356X_ANDROID11_CUSTOM_HID ## 1.确认SDK版本。 cat .repo/manifests/include/rk356x_repository.xml <?xml version="1.0" encoding="UTF-8"?> <manifest> <project path="device/rockchip/rk356x" name="rk/dev…