版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《鸿蒙应用开发基础》在线开放课程项目2设计转盘式抽奖程序主讲:本课程团队项目实现目录Contents项目实现一、设计转盘式抽奖程序界面二、编写转盘式抽奖程序代码三、拓展一、设计转盘式抽奖程序界面1.任务分析转盘式抽奖程序的界面要有抽奖开始按钮、抽奖过程展示以及抽奖结果显示,其中抽奖开始页面要直观地展示可能抽中的奖品,而抽奖过程可以用动画来实现。一、设计转盘式抽奖程序界面2.代码实现(1)新建项目project2,在页面Index.ets的最前面添加如下代码:importwindowfrom'@ohos.window';importLoggerfrom'./class/Logger';(2)在页面Index.ets中”build()的前面添加如下代码:@StatescreenWidth:number=0;@StatescreenHeight:number=0;aboutToAppear(){//获取屏幕的宽与高
window.getLastWindow(context).then((windowClass:window.Window)=>{letwindowProperties=windowClass.getWindowProperties();this.screenWidth=px2vp(windowProperties.windowRect.width);this.screenHeight=px2vp(windowProperties.windowRect.height);}).catch((error:Error)=>{Logger.error('无法获取窗口大小。原因:'+JSON.stringify(error));})}一、设计转盘式抽奖程序界面2.代码实现(3)在页面Index.ets中@Entry的前面添加如下代码:importDrawModelfrom'./class/DrawModel';importPrizeDialogfrom'./class/PrizeDialog';importPrizeDatafrom'./class/PrizeData';importStyleConstantsfrom'./class/StyleConstants';importCommonConstantsfrom'./class/CommonConstants';letcontext=getContext(this);//获取上下文(4)在页面Index.ets中以@Statemessage开头的这一行替换成如下代码:privatesettings:RenderingContextSettings=newRenderingContextSettings(true);privatecanvasContext:CanvasRenderingContext2D=newCanvasRenderingContext2D(this.settings);一、设计转盘式抽奖程序界面2.代码实现(3)在页面Index.ets中以RelativeContainer(){开头的这一行开始到文件倒数第三行为止,这一段替换成如下代码:Stack({alignContent:Alignment.Center}){Canvas(this.canvasContext).width(StyleConstants.FULL_PERCENT).height(StyleConstants.FULL_PERCENT).onReady(()=>{//通过draw方法进行绘制
this.drawModel.draw(this.canvasContext,this.screenWidth,this.screenHeight);})//此处省略几行代码Image($r('app.media.ic_center'))//开始抽奖图片.width(StyleConstants.CENTER_IMAGE_WIDTH).height(StyleConstants.CENTER_IMAGE_HEIGHT).enabled(this.enableFlag).margin({top:50}).onClick(()=>{this.enableFlag=!this.enableFlag;//此处省略一行代码})}一、设计转盘式抽奖程序界面2.代码实现(3)在页面Index.ets中以RelativeContainer(){开头的这一行开始到文件倒数第三行为止,这一段替换成如下代码:.width(StyleConstants.FULL_PERCENT).height(StyleConstants.FULL_PERCENT).backgroundImage($r('app.media.ic_background'),ImageRepeat.NoRepeat).backgroundImageSize({width:StyleConstants.FULL_PERCENT,height:StyleConstants.BACKGROUND_IMAGE_SIZE})二、编写转盘式抽奖程序代码1.任务分析单击“开始”按钮即可开始抽奖,抽奖结束后会自动显示抽奖结果,用户确认后即可关闭抽奖结果。若要重新抽奖,可以重复前面的步骤进行。二、编写转盘式抽奖程序代码2.代码实现(1)在文件DrawModel.ets中,通过draw方法绘制圆形抽奖转盘。//画抽奖圆形转盘draw(canvasContext:CanvasRenderingContext2D,screenWidth:number,screenHeight:number){if(CheckEmptyUtils.isEmptyObj(canvasContext)){Logger.error('[DrawModel][draw]画布上下文为空。');return;}this.canvasContext=canvasContext;this.screenWidth=screenWidth;this.canvasContext.clearRect(0,0,this.screenWidth,screenHeight);this.canvasContext.translate(this.screenWidth/CommonConstants.TWO,screenHeight/CommonConstants.TWO);//指定画布平移距离this.drawFlower();//画外部圆盘的花瓣this.drawOutCircle();//画外部圆盘、小圈圈this.drawInnerCircle();//画内部圆盘this.drawInnerArc();//画内部扇形抽奖区域this.drawArcText();//画内部扇形区域文字this.drawImage();//画内部扇形区域奖品对应的图片this.canvasContext.translate(-this.screenWidth/CommonConstants.TWO,-screenHeight/CommonConstants.TWO);}二、编写转盘式抽奖程序代码2.代码实现(2)回到页面Index.ets,给组件Canvas添加rotate属性,给组件Image添加点击事件onClick。Canvas(this.canvasContext).width(StyleConstants.FULL_PERCENT).height(StyleConstants.FULL_PERCENT).onReady(()=>{//通过draw方法进行绘制
this.drawModel.draw(this.canvasContext,this.screenWidth,this.screenHeight);}).rotate({x:0,y:0,z:1,angle:this.rotateDegree,centerX:this.screenWidth/CommonConstants.TWO,centerY:this.screenHeight/CommonConstants.TWO})Image($r('app.media.ic_center'))//开始抽奖图片
.width(StyleConstants.CENTER_IMAGE_WIDTH).height(StyleConstants.CENTER_IMAGE_HEIGHT).enabled(this.enableFlag).margin({top:50}).onClick(()=>{this.enableFlag=!this.enableFlag;this.startAnimator();})二、编写转盘式抽奖程序代码2.代码实现(3)在页面Index.ets中build()的前面添加如下代码:@StatedrawModel:DrawModel=newDrawModel();@StaterotateDegree:number=0;@StateenableFlag:boolean=true;@StateprizeData:PrizeData=newPrizeData();dialogController:CustomDialogController=newCustomDialogController({builder:PrizeDialog({prizeData:$prizeData,enableFlag:$enableFlag}),autoCancel:false});startAnimator(){//启动动画letrandomAngle=Math.round(Math.random()*CommonConstants.CIRCLE);this.prizeData=this.drawModel.showPrizeData(randomAngle);//获取奖品信息
二、编写转盘式抽奖程序代码2.代码实现(3)在页面Index.ets中build()的前面添加如下代码:animateTo({duration:CommonConstants.DURATION,curve:Curve.Ease,delay:0,iterations:1,playMode:PlayMode.Normal,onFinish:()=>{this.rotateDegree=CommonConstants.ANGLE-randomAngle;this.dialogController.open();//弹
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026及未来5年中国多功能电子密码柜数据监测研究报告
- 2026事业单位工勤技能-甘肃-甘肃保安员二级(技师)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-湖北-湖北热力运行工五级(初级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-海南-海南工程测量工四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-浙江-浙江防疫员四级(中级工)历年参考题库含答案详解3套试卷
- 2026事业单位工勤技能-天津-天津水工闸门运行工一级(高级技师)历年参考题库含答案详解3套试卷
- 2026年秋季开学高三提分策略晨会讲话课件
- 2025年辽宁省北票市《行测》考试考前冲刺试卷带答案详解(达标题)
- 2025年甘肃省敦煌市《行测》考试模拟试卷(重点)附答案详解
- 2025年吉林省德惠市《行测》考试考前冲刺试卷【模拟题】附答案详解
- 2026年学宪法讲宪法知识竞赛考试题库(含答案)
- 2026年文山州砚山县公安局第三批警务辅助人员招聘(46人)笔试备考试题及答案详解
- CSCO结直肠癌诊疗指南(2026版)
- 2026新教科版四年级科学上册知识点
- 2026年全国I卷高考语文真题解读暨2027届高三高考备考复习策略
- 施工现场临时用电安全技术规范(JGJ-T46-2024 完整版)
- 2026年制造执行系统(MES)行业分析报告及未来发展趋势报告
- 2026部编版语文二年级上册全册教学评一体化大单元教学设计
- 中国对外文化集团公司招聘笔试题库2026
- 2026年海南省广播电视台(融媒体中心)人员招聘考试备考试题及答案详解
- 晋韵砖魂:山西晋中传统砖雕艺术的历史、技艺与传承
评论
0/150
提交评论