基于HarmonyOS ArkUI 3

DevEco Studio下载安装成功后,打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Empty Ability选项,点击Next按钮。

将文件命名为SaoLei(文件名不能出现中文或者特殊字符,否则将无法成功创建项目文件),Project Type勾选Application,选择保存路径,Language勾选eTS,选择API7,设备勾选Phone,最后点击Finish按钮。

3. 准备工作

entry>src>main>config.json文件中最下方"launchType": "standard"的后面添加以下代码,这样就可以实现去掉应用上方的标签栏了。

config.json最下方部分代码:

“metaData”: {

“customizeData”: [

{

“name”: “hwc-theme”,

“value”: “androidhwext:style/Theme.Emui.Light.NoTitleBar”,

“extra”: “”

}

]

}

4. 保存图片

将图片保存到entry>src>main>resources>rawfile文件中。

二、欢迎页面

1. 更改文件名

entry>src>ets>default>pages>index.ets文件右键,在弹出的菜单栏中选择Refactor,再在弹出的子菜单栏中选择Rename,或者按Shift+F6,将文件命名为logo.ets。

image.png

entry>src>main>config.json文件中"js"项中的"pages"项中的"pages/index"更改为"pages/logo"。

config.json最下方部分代码:

“js”: [

{

“mode”: {

“syntax”: “ets”,

“type”: “pageAbility”

},

“pages”: [

“pages/logo”

],

“name”: “default”,

“window”: {

“designWidth”: 720,

“autoDesignWidth”: false

}

}

]

2. 添加背景

logo.ets文件中,通过Image($rawfile(‘LOGO.png’))可放置Logo图片,通过Text(‘木棉花扫雷’)可放置文字内容。

属性linearGradient为设置渐变颜色,linearGradient中的angle为渐变角度,设置为180,即为从上往下渐变,colors则为渐变的颜色。

logo.ets:

@Entry

@Component

struct Logo {

build() {

Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) {

Image($rawfile(‘LOGO.png’))

.objectFit(ImageFit.Contain)

.height(300)

Text(‘木棉花扫雷’)

.fontSize(30)

.fontColor(Color.White)

.margin({ top: 200 })

}

.width(‘100%’)

.height(‘100%’)

.linearGradient(

{

angle: 180,

colors: [[‘#D3D7DC’, 0.1], [“#B4BED2”, 0.6], [“#A0AAC8”, 1]]

})

}

}

3. 添加动画效果

这里使用的动画效果是通过animateTo显式动画实现的。animateTo显式动画可以设置组件从状态A到状态B的变化动画效果,包括样式、位置信息和节点的增加删除等,开发者无需关注变化过程,只需指定起点和终点的状态。animateTo还提供播放状态的回调接口,是对属性动画的增强与封装。

添加状态变量opacityValue和scaleValue并初始化为0,分别用于表示透明度和放缩的倍数,动画效果中实现这两个数值从0到1,即可实现Logo的渐出和放大效果。

定义一个贝塞尔曲线cubicBezier,Curves.cubicBezier(0.1, 0.2, 1, 1)。由于需要使用到动画能力接口中的插值计算,故需要导入curves模块。@ohos.curves模块提供了线性Curve. Linear、阶梯step、三阶贝塞尔(cubicBezier)和弹簧(spring)插值曲线的初始化函数,可以根据入参创建一个插值曲线对象。

在animateTo显式动画中,设置动画时长(duration)为2s,延时(delay)0.1s开始播放,设置显示动效event的闭包函数(curve),即起点状态到终点状态为透明度opacityValue和大小scaleValue从0到1。

logo.ets:

// @ts-nocheck

import Curves from ‘@ohos.curves’

@Entry

@Component

struct Logo {

@State private opacityValue: number = 0

@State private scaleValue: number = 0

private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1)

build() {

Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) {

Image($rawfile(‘LOGO.png’))

.objectFit(ImageFit.Contain)

.height(300)

.scale({ x: this.scaleValue, y: this.scaleValue })

.opacity(this.opacityValue)

.onAppear(() => {

animateTo({

duration: 2000,

curve: this.curve1,

delay: 100,

}, () => {

this.opacityValue = 1

this.scaleValue = 1

})

})

Text(‘木棉花扫雷’)

.fontSize(30)

.fontColor(Color.White)

.margin({ top: 200 })

}

.width(‘100%’)

.height(‘100%’)

.linearGradient(

{

angle: 180,

colors: [[‘#D3D7DC’, 0.1], [“#B4BED2”, 0.6], [“#A0AAC8”, 1]]

})

}

}

4. 添加跳转效果

先创建一个mainpage.ets文件。

在animateTo显示动画播放结束的onFinish回调接口中,调用定时器Timer的setTimeout接口延时1s后,调用router.replace,显示mainpage.ets页面。其中同样需要导入router模块。

logo.ets:

// @ts-nocheck

import router from ‘@system.router’

import Curves from ‘@ohos.curves’

@Entry

@Component

struct Logo {

@State private opacityValue: number = 0

@State private scaleValue: number = 0

private curve1 = Curves.cubicBezier(0.1, 0.2, 1, 1)

build() {

Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center, direction: FlexDirection.Column }) {

Image($rawfile(‘LOGO.png’))

.objectFit(ImageFit.Contain)

.height(300)

.scale({ x: this.scaleValue, y: this.scaleValue })

.opacity(this.opacityValue)

.onAppear(() => {

animateTo({

duration: 2000,

curve: this.curve1,

delay: 100,

onFinish: () => {

setTimeout(() => {

router.replace({ uri: “pages/mainpage” })

}, 1000);

}

}, () => {

this.opacityValue = 1

this.scaleValue = 1

})

})

Text(‘木棉花扫雷’)

.fontSize(30)

.fontColor(Color.White)

.margin({ top: 200 })

}

.width(‘100%’)

.height(‘100%’)

.linearGradient(

{

angle: 180,

colors: [[‘#D3D7DC’, 0.1], [“#B4BED2”, 0.6], [“#A0AAC8”, 1]]

})

}

}

三、主页页面

1. 添加背景

游戏页面的背景和欢迎页面的背景几乎一样,这里就不重复啰嗦了。

mainpage.ets:

@Entry

@Component

struct Mainpage {

build() {

Column() {

Image($rawfile(‘mine.png’))

.objectFit(ImageFit.Contain)

.height(300)

.scale({ x: 0.5, y: 0.5 })

.opacity(0.8)

}

.width(‘100%’)

.height(‘100%’)

.linearGradient(

{

angle: 180,

colors: [[‘#D3D7DC’, 0.1], [“#B4BED2”, 0.6], [“#A0AAC8”, 1]]

})

}

}

2. 添加按钮

从效果图可以看出按钮的样式是一致的,因此我们可以使用装饰器@Component自定义按钮。添加四个变量String、difficulty、Number_row和Number_column,分别用于记录难度文本、地雷数量、网格的行数和网格的列数。在Button组件中设置图片和文本的样式。 [br/>在装饰器@Entry装饰的组件中,通过调用自定义组件的形式绘制三个按钮。

mainpage.ets:](mailto:br/%3E%E5%9C%A8%E8%A3%85%E9%A5%B0%E5%99%A8@Entry%E8%A3%85%E9%A5%B0%E7%9A%84%E7%BB%84%E4%BB%B6%E4%B8%AD%EF%BC%8C%E9%80%9A%E8%BF%87%E8%B0%83%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84%E5%BD%A2%E5%BC%8F%E7%BB%98%E5%88%B6%E4%B8%89%E4%B8%AA%E6%8C%89%E9%92%AE%E3%80%82%3Cbr/)

@Entry

@Component

struct Mainpage {

build() {

Column() {

Image($rawfile(‘mine.png’))

.objectFit(ImageFit.Contain)

.height(300)

.scale({ x: 0.5, y: 0.5 })

.opacity(0.8)

setButton({ String: ‘初级’, difficulty: 10, Number_row: 9, Number_column: 9 });

setButton({ String: ‘中级’, difficulty: 30, Number_row: 12, Number_column: 12 });

setButton({ String: ‘高级’, difficulty: 50, Number_row: 16, Number_column: 16 });

}

.width(‘100%’)

.height(‘100%’)

.linearGradient(

{

angle: 180,

colors: [[‘#D3D7DC’, 0.1], [“#B4BED2”, 0.6], [“#A0AAC8”, 1]]

})

}

}

@Component

struct setButton {

private String: string

private difficulty: number

private Number_row: number

private Number_column: number

build() {

Button({ type: ButtonType.Capsule, stateEffect: true }){

Column(){

Text(this.String)

.textAlign(TextAlign.Center)

.fontSize(30)

.fontWeight(600)

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

文末

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

【视频教程】

天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

id)**

文末

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我整理了一些资料,需要的可以免费分享给大家

这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司2021年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

[外链图片转存中…(img-OwTqw158-1712388858419)]

[外链图片转存中…(img-Hi069rx1-1712388858419)]

【视频教程】

[外链图片转存中…(img-4a51yl5N-1712388858420)]

天道酬勤,只要你想,大厂offer并不是遥不可及!希望本篇文章能为你带来帮助,如果有问题,请在评论区留言。

《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
  • 25
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值