HarmonyOS第一课 05 从简单的页面开始-开发01
学习了第05课之后,按照官方教程,自己写一个界面来,官方提供了非常多的素材,按照教程来一步步即可完成,接下来,我把我的操作步骤记录下来,形成第一个鸿蒙界面。
第一步,新建项目
打开DS,新建一个Empty Ability项目。
除了car不勾选之外,其他都勾上。
新建项目完成。
点击Previewer。出现了hello world。
第二步,创建页面。
下载官方案例素材。下载地址:「链接」
目标界面:
1,将背景和logo换了。
2,设计界面。
先把“快速入门”这四个字先写出来。
@Entry
@Component
struct Index {
@State message: string = '快速入门';
build() {
Column() {
Text(this.message)
//.id('HelloWorld') // 这个不需要
.fontSize(24)
.fontWeight('700')
.width("100%")
.textAlign(TextAlign.Start)
.padding({"left":16})
.fontFamily("HarmonyHeiTi-Bold")
.lineHeight(33)
}
.height('100%')
.width('100%')
.backgroundColor("#F1F3F5")
}
}
创建Image组件
在上一节中,我们创建了标题视图,接下来需要使用Image组件添加图片。Previewer可以直接预览@Entry装饰器装饰的整个页面,也可以预览由@Preview装饰器装饰的单独组件。 本节中将学习如何单独预览组件视图,并将视图组合进整个页面。
组合标题和图片视图。
在@Entry装饰器装饰的Index组件中引入Banner组件,放在Text的下方,使用预览器预览完整视图。
创建Swiper,制作课滑动的Banner
官方提供了banner的素材。下载地址:「链接」
根据设计图可以看到快速入门Banner运营位由多张图片资源构成,于是我们可以在Index.ets文件中创建一个BannerClass类,用于表示每张图片资源的数据结构。
将素材复制到media文件夹中。
然后新建一个Banner类,便于滑动
// 新建一个Banner类,便于滑动
class BannerClass{
id:string="";//用于唯一标识每一张图片资源,在之后的ForEach内容中我们会看到其作用
imgSrc:ResourceStr = ""; //imageSrc属性,用于存储图片地址
url:string =""; //用于存储Banner图片点击后跳转到的在线网页地址,在之后的跳转功能中会用到。
// 按住alt+insert键,可以自动生成构造方法
constructor(id: string, imgSrc: ResourceStr, url: string) {
this.id = id;
this.imgSrc = imgSrc;
this.url = url;
}
}
// 新建一个Banner
@Component
@Preview
struct Banner{
@State bannerList: Array<BannerClass>=[
new BannerClass('pic0',$r('app.media.banner_pic0'),'https://developer.huawei.com'),
new BannerClass('pic1',$r('app.media.banner_pic1'),'https://developer.huawei.com'),
new BannerClass('pic2',$r('app.media.banner_pic2'),'https://developer.huawei.com'),
new BannerClass('pic3',$r('app.media.banner_pic3'),'https://developer.huawei.com'),
new BannerClass('pic4',$r('app.media.banner_pic4'),'https://developer.huawei.com'),
new BannerClass('pic5',$r('app.media.banner_pic5'),'https://developer.huawei.com')
]
build() {
Image($r('app.media.banner_pic1')).objectFit(ImageFit.Contain)
.width("100%")
// 这里能否合并left和right?
.padding({"left":16,"right":16,"top":11})
// 圆角边框
.borderRadius(16)
}
}
//上面两部分都是index.ets的内容,所以,整个index.ets就是如下的代码
// 新建一个Banner类,便于滑动
class BannerClass{
id:string="";//用于唯一标识每一张图片资源,在之后的ForEach内容中我们会看到其作用
imgSrc:ResourceStr = ""; //imageSrc属性,用于存储图片地址
url:string =""; //用于存储Banner图片点击后跳转到的在线网页地址,在之后的跳转功能中会用到。
// 按住alt+insert键,可以自动生成构造方法
constructor(id: string, imgSrc: ResourceStr, url: string) {
this.id = id;
this.imgSrc = imgSrc;
this.url = url;
}
}
@Entry
@Component
struct Index {
@State message: string = '快速入门';
build() {
Column() {
Text(this.message)
//.id('HelloWorld') // 这个不需要
.fontSize(24)
.fontWeight('700')
.width("100%")
.textAlign(TextAlign.Start)
.padding({"left":16})
.fontFamily("HarmonyHeiTi-Bold")
.lineHeight(33)
// 把Banner放在文字的下面
Banner()
}
.height('100%')
.width('100%')
.backgroundColor("#F1F3F5")
}
}
// 新建一个Banner
@Component
@Preview
struct Banner{
@State bannerList: Array<BannerClass>=[
new BannerClass('pic0',$r('app.media.banner_pic0'),'https://developer.huawei.com'),
new BannerClass('pic1',$r('app.media.banner_pic1'),'https://developer.huawei.com'),
new BannerClass('pic2',$r('app.media.banner_pic2'),'https://developer.huawei.com'),
new BannerClass('pic3',$r('app.media.banner_pic3'),'https://developer.huawei.com'),
new BannerClass('pic4',$r('app.media.banner_pic4'),'https://developer.huawei.com'),
new BannerClass('pic5',$r('app.media.banner_pic5'),'https://developer.huawei.com')
]
build() {
Image($r('app.media.banner_pic1')).objectFit(ImageFit.Contain)
.width("100%")
// 这里能否合并left和right?
.padding({"left":16,"right":16,"top":11})
// 圆角边框
.borderRadius(16)
}
}
好了,我们完成了渲染数据源的准备,接下来,会使用创建好的数据完成Banner运营位的实现。
我们发现快速入门Banner位为一个轮播图效果。于是我们使用Swiper组件作为外层容器。可以看到现在轮播图具有一个可以轮播的Banner图。
以上的代码只有一个Image,如果想加入5个image,那么需要使用for循环了。
// 滑动块,将image包裹起来
Swiper(){
ForEach(this.bannerList,(item:BannerClass,index:number)=>{
Image(item.imgSrc).objectFit(ImageFit.Contain)
.width("100%")
// 这里能否合并left和right?
.padding({"left":16,"right":16,"top":11})
// 圆角边框
.borderRadius(16)
},(item:BannerClass,index:number)=>item.id)
}
//设置一下Swiper的属性。其中,autoPlay控制是否自动轮播子组件,loop属性控制是否循环播放,
// indicator属性自定义导航点的位置和样式。
.autoPlay(true)
.loop(true)
.indicator(new DotIndicator().color('#1a000000').selectedColor("#0a59f7"))
好了,现在已经学会了完成上面一部分了,下节咱们继续完成下半部分。
敬请关注。
完成之后,我将把写好注释的代码提供免费下载。
原文地址:https://blog.csdn.net/li060708/article/details/142796632
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!