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

介绍

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

效果预览图

img

使用说明

  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

最后

随着鸿蒙开发越来越火热,我了解到现在有很多小伙伴想入行鸿蒙,但又不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。我给大家整理了一份实用的鸿蒙(Harmony OS)开发学习手册资料用来跟着学习是非常有利于帮助大家提升鸿蒙开发技术的。

相对于网上那些碎片化的知识内容,这份学习资料的知识点更加系统化,更容易理解和记忆。资料包含了、应用开发导读(ArkTS)、HarmonyOS 概念、如何快速入门、开发基础知识、基于ArkTS 开发、等鸿蒙开发必掌握的核心知识要点,内容包含了(技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

通过这份资料,你将能够系统地学习鸿蒙开发的核心技术,避免在学习的过程中走弯路、浪费时间。相信在不久的将来,你将成为鸿蒙开发领域的佼佼者,为鸿蒙生态的繁荣发展贡献自己的力量。

  • 鸿蒙学习路线图:为您提供一个清晰的鸿蒙学习规划,助您高效掌握关键知识点。

在这里插入图片描述

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的《鸿蒙开发学习笔记》,内容包含ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

【有需要的朋友,可以扫描下方二维码免费领取!!!】

《鸿蒙(HarmonyOS)开发学习指南》

第一章 快速入门

1、开发准备

2、构建第一个ArkTS应用(Stage模型)

3、构建第一个ArkTS应用(FA模型)

4、构建第一个JS应用(FA模型)

5、…

图片

第二章 开发基础知识

1、应用程序包基础知识

2、应用配置文件(Stage模型)

3、应用配置文件概述(FA模型)

4、…

图片

第三章 资源分类与访问

1、 资源分类与访问

2、 创建资源目录和资源文件

3、 资源访问

4、…

图片

第四章 学习ArkTs语言

1、初识ArkTS语言

2、基本语法

3、状态管理

4、其他状态管理

5、渲染控制

6、…

图片

第五章 UI开发

1.方舟开发框架(ArkUI)概述

2.基于ArkTS声明式开发范式

3.兼容JS的类Web开发范式

4…

图片

第六章 Web开发

1.Web组件概述

2.使用Web组件加载页面

3.设置基本属性和事件

4.在应用中使用前端页面JavaScript

5.ArkTS语言基础类库概述

6.并发

7…

图片

11.网络与连接

12.电话服务

13.数据管理

14.文件管理

15.后台任务管理

16.设备管理

17…

图片

第七章 应用模型

1.应用模型概述

2.Stage模型开发指导

3.FA模型开发指导

4…

图片

扫描下方二维码免费领取,《鸿蒙(HarmonyOS)开发学习指南》

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值