资讯详情

资讯详情

Harmony鸿蒙实战开发-抽奖app【源码在文末】

Harmony鸿蒙实战开发-抽奖app【源码在文末】文章目录Harmony鸿蒙实战开发-抽奖app【源码在文末】一、运行演示二、部分代码三、源码运行工具DevEco Studio一、运行演示二、部分代码/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import window from ohos.window; import Logger from ../common/utils/Logger; import DrawModel from ../viewmodel/DrawModel; import PrizeDialog from ../view/PrizeDialog; import PrizeData from ../viewmodel/PrizeData; import StyleConstants from ../common/constants/StyleConstants; import CommonConstants from ../common/constants/CommonConstants; // 获取上下文 let context getContext(this); Entry Component struct CanvasPage { private settings: RenderingContextSettings new RenderingContextSettings(true); private canvasContext: CanvasRenderingContext2D new CanvasRenderingContext2D(this.settings); State drawModel: DrawModel new DrawModel(); State screenWidth: number 0; State screenHeight: number 0; State rotateDegree: number 0; State enableFlag: boolean true; State prizeData: PrizeData new PrizeData(); dialogController: CustomDialogController new CustomDialogController({ builder: PrizeDialog({ prizeData: $prizeData, enableFlag: $enableFlag }), autoCancel: false }); aboutToAppear() { // 获取屏幕宽高不包括导航视图的高度 window.getLastWindow(context) .then((windowClass: window.Window) { let windowProperties windowClass.getWindowProperties(); this.screenWidth px2vp(windowProperties.windowRect.width); this.screenHeight px2vp(windowProperties.windowRect.height); }) .catch((error: Error) { Logger.error(获取窗口大小失败。原因 JSON.stringify(error)); }) } build() { Stack({ alignContent: Alignment.Center }) { Canvas(this.canvasContext) .width(StyleConstants.FULL_PERCENT) .height(StyleConstants.FULL_PERCENT) .onReady(() { 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) .onClick(() { this.enableFlag !this.enableFlag; this.startAnimator(); }) } .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 }) } /** * 启动动画 */ startAnimator() { let randomAngle Math.round(Math.random() * CommonConstants.CIRCLE); // 获取奖品信息 this.prizeData this.drawModel.showPrizeData(randomAngle); animateTo({ duration: CommonConstants.DURATION, curve: Curve.Ease, delay: 0, iterations: 1, playMode: PlayMode.Normal, onFinish: () { this.rotateDegree CommonConstants.ANGLE - randomAngle; // 显示奖品信息弹窗 this.dialogController.open(); } }, () { this.rotateDegree CommonConstants.CIRCLE * CommonConstants.FIVE CommonConstants.ANGLE - randomAngle; }) } }三、源码通过百度网盘分享的文件…zip链接https://pan.baidu.com/s/1xbu6QWOItJCKOzAaG49Piw文件已经加密请联系请加下方wx号获取源码仅一杯奶茶钱 号码Lvnvn0508
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →