#星光计划2.0# OpenHarmony ArkUI+原生绘图之幸运大转盘(一) 原创 精华
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
活动链接: https://harmonyos.51cto.com/posts/9422
ArkUI实操,结合原生绘图实现的奖项数量与内容可变的幸运大转盘实例。
Table of Contents
效果展示
此外,转盘的奖项的数量,内容都是可以变动的(菜单就是用来编辑奖项的,后续完善),如下:
主要功能
实现转盘抽奖功能,可以设定中奖概率。
奖项的数量、内容可自由设定。
原生html\css\js代码,没有使用资源文件,可复用。
设计时考虑到的问题
控件是使用现有图片还是通过
CSS
画出?
先是用的图片充当控件,考虑到奖项的内容可编辑性,还是老老实实画控件比较好。每个奖项的概率如何设计?
先生成一个随机数,根据随机数取值大小,决定奖品内容。假设所有奖项的取值范围坐落到0100的数轴上,并且1号奖品的取值范围是010,2号:10~30, 3号:30~35,。。。通过设定每个奖项取值区间的大小来决定中奖的权重,这样就能控制中奖概率了。如何实现奖项可编辑?
我将所有奖项存放在一个数据数组中,先能通过遍历数组中奖项信息,画出转盘,这是第一步。
之后,通过菜单功能提供一个列表控件,使其能够对数组中的信息进行增删改查,这是第二步。
在界面加载的onShow()函数中进行初始化,这样每次界面显示的时候就能更新转盘了。
具体代码
index.hml
outer
就是转盘整体,包含转盘和箭头。我箭头是通过将圆+长方形+正方形
平移、旋转组合而成的(虽然有点笨,没有想到其它办法)。转盘是一个画布canvas
,通过移动画笔起点,旋转,一个扇区接一个扇区画出的。按键有两个,抽奖就是转动转盘,实现抽奖逻辑。菜单按键跳转到新的界面,实现奖项内容的编辑,当然还没写完。。。
index.css
.canvas
中的宽、高决定了转盘大小,代码中将转盘的半径设置为画布一半宽的长度。同时,由于箭头是由圆、长方形、正方形平移旋转组成,那他们的偏移量、大小也是相对.canvas
的属性取的,如果大小有变动需要调整。
为什么不将箭头也画出来?
如果将箭头也画在画布上,那么我不能实现转盘转动,箭头不动的动画了,画布是一个整体。
index.js
js
中存放主要逻辑,所以对注释也比较详细。下面是个人踩坑中学习的点:
希望加“内定”功能,哈哈