HarmonyOS NEXT仓颉开发语言实战案例:健身App

布局王
• 阅读 4

各位好,今日分享一个健身app的首页: HarmonyOS NEXT仓颉开发语言实战案例:健身App 这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分。重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来实现,顶部部分的具体实现代码如下:

Column{
    Text('February')
    .fontColor(Color.WHITE)
    .fontSize(14)

    Row{
        Row{
            Image(@r(app.media.goal))
            .width(37)
            .height(37)
            Text('MY GOAL')
            .fontColor(Color.WHITE)
            .fontSize(30)
            .fontWeight(FontWeight.Bolder)
            .margin(left:6)
        }

        Image(@r(app.media.cm_add))
        .width(28)
        .height(28)

    }
    .margin(top:20)
    .width(100.percent)
    .justifyContent(FlexAlign.SpaceBetween)
    .alignItems(VerticalAlign.Center)
}
.alignItems(HorizontalAlign.Start)
.padding(left:12,right:12,top:60)
.width(100.percent)
.height(220)
.linearGradient( direction: GradientDirection.Bottom, colors:[(Color(103, 76, 222, alpha: 1.0),0.0),(Color(129, 28, 219, alpha: 1.0),1.0)], repeating: false)
.borderRadius(bottomLeft: 20.vp, bottomRight: 20.vp)
Row{
    Column(5){
        Row(6){
            Text('weight')
            .fontColor(Color.GRAY)
            .fontSize(11)
            Image(@r(app.media.cm_down))
            .width(15)
            .height(15)
        }
        .justifyContent(FlexAlign.Center)
        .alignItems(VerticalAlign.Center)
        .width(80)
        .height(20)
        .borderRadius(10)
        .border(width: 1.vp, color: Color(216, 216, 216, alpha: 1.0), radius:10.vp,style: BorderStyle.Solid)
        Row(8){
            Image(@r(app.media.cm_js))
            .width(28)
            .height(28)
            Column(5){
                  Progress(value: 50.0, total: 100.0, `type`: ProgressType.Linear)
                    .width(100.percent)
                    .color(0x9570FF)
                Row{
                    Text('250 lb')
                    .fontColor(Color.GRAY)
                    .fontSize(10)
                    Text('250 lb')
                    .fontColor(Color.GRAY)
                    .fontSize(10)
                }
                .width(100.percent)
                .alignItems(VerticalAlign.Center)
                .justifyContent(FlexAlign.SpaceBetween)
            }
            .layoutWeight(1)
        }
        .width(100.percent)
    }
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Start)
    .padding(10)
    .width(100.percent)
    .height(80)
    .borderRadius(10)
    .backgroundColor(Color.WHITE)
}
.width(100.percent)
.height(80)
.margin(top:-50)
.padding(left:12,right:12)

剩余的部分是滚动的列表,而且有标题,所以使用List容器来实现,关于List标题的使用大家要多多熟悉:

@Builder func itemHead(text:String) {
    Row{
        Text(text)
        .fontColor(Color.GRAY)
        .fontSize(13)
    }
    .width(100.percent)
    .height(35)
    .alignItems(VerticalAlign.Center)
    .padding(top:3,left:10)
}
ListItemGroup(ListItemGroupParams(header:{=>bind(this.itemHead,this)('THIS WEEK')})){
}

需要注意的是,列表的第一行是可以横向滚动的列表,我这里选择使用Scroll容器:

Scroll{
    Row(12){
        Stack(Alignment.Bottom){
            Image(@r(app.media.cm_s1))
            .width(124)
            .height(155)
            Column(3){
                Text('WALKING LUNGES')
                .fontColor(Color.WHITE)
                .fontSize(13)
                .fontWeight(FontWeight.Bold)
                Text('Today')
                .fontSize(10)
                .fontColor(Color.WHITE)
                .backgroundColor(0x3EC7E6)
                .height(16)
                .width(68)
                .borderRadius(8)
                .textAlign(TextAlign.Center)
            }
            .alignItems(HorizontalAlign.Start)
            .margin(bottom:8)
        }
        Stack(Alignment.Bottom){
            Image(@r(app.media.cm_s2))
            .width(124)
            .height(155)
            Column(3){
                Text('WALKING LUNGES')
                .fontColor(Color.WHITE)
                .fontSize(13)
                .fontWeight(FontWeight.Bold)
                Text('Today')
                .fontSize(10)
                .fontColor(Color.WHITE)
                .backgroundColor(0x3EC7E6)
                .height(16)
                .width(68)
                .borderRadius(8)
                .textAlign(TextAlign.Center)
            }
            .alignItems(HorizontalAlign.Start)
            .margin(bottom:8)
        }
        Stack(Alignment.Bottom){
            Image(@r(app.media.cm_s3))
            .width(124)
            .height(155)
            Column(3){
                Text('WALKING LUNGES')
                .fontColor(Color.WHITE)
                .fontSize(13)
                .fontWeight(FontWeight.Bold)
                Text('Today')
                .fontSize(10)
                .fontColor(Color.WHITE)
                .backgroundColor(0x3EC7E6)
                .height(16)
                .width(68)
                .borderRadius(8)
                .textAlign(TextAlign.Center)
            }
            .alignItems(HorizontalAlign.Start)
            .margin(bottom:8)
        }
    }
    .padding(left:12,right:12)
}
.height(155)
.width(100.percent)

最后一部分比较简单,和上面代码类似,就不再赘述了。 今天的内容就是这样,感谢阅读。##HarmonyOS语言##仓颉##休闲娱乐#

点赞
收藏
评论区
推荐文章
京东云开发者 京东云开发者
7个月前
Taro 鸿蒙技术内幕系列(二):如何让 W3C 标准的 CSS跑在鸿蒙上
作者:京东零售马银涛基于Taro打造的京东鸿蒙APP已跟随鸿蒙Next系统公测,本系列文章将深入解析Taro如何实现使用React开发高性能鸿蒙应用的技术内幕背景HarmonyOS采用自研的ArkUI框架作为原生UI开发方案,这套方案有完善的布局系统和样式
陈杨 陈杨
1个月前
鸿蒙5开发宝藏案例分享---一多开发实例(股票类)
🌟【干货预警】HarmonyOS开发隐藏案例大揭秘!手把手教你打造自适应股票APP🌟大家好!今天要跟大家分享一个HarmonyOS开发的宝藏案例——股票类应用"一次开发多端部署"的完整实践!我翻遍官方文档挖到的真·实战技巧,赶紧收藏!💡先划重点:这个
陈杨 陈杨
2天前
鸿蒙5开发宝藏案例分享---点击响应时延分析
鸿蒙宝藏大发现!官方隐藏的实战案例,开发效率直接翻倍🚀大家好呀!最近在折腾鸿蒙开发时,意外挖到了华为官方的案例宝藏库!原来HarmonyOS文档里藏了近百个场景化案例,覆盖了布局适配、性能优化、动效实现等高频需求。这些案例不仅提供完整代码,还有避坑指南,
布局王 布局王
13小时前
Uniapp开发鸿蒙购物应用教程之商品列表
今天要分享的依然是使用uniapp跨平台开发鸿蒙应用的系列教程,今天要做的是实现首页的商品列表,效果图如下:今天的内容分为两部分,一部分是中间的商品分类,还有下方商品列表,不过这两部分其实是相同的布局方式,都是网格布局。在鸿蒙原生开发中我们都使用过grid
布局王 布局王
13小时前
鸿蒙仓颉语言开发实战教程:商城搜索页
大家下午好,今天要分享的是仓颉语言商城应用的搜索页。搜索页的内容比较多,都有点密集恐惧症了,不过我们可以从上至下将它拆分开来,逐一击破。导航栏搜索页的的最顶部是导航栏,由返回按钮和搜索框两部分组成,比较简单,具体实现代码如下:Row(6)Image(@r(
布局王 布局王
13小时前
鸿蒙Next仓颉语言开发实战教程:消息列表
大家周末好,今天要分享的是仓颉语言开发商城应用实战教程的消息列表页面。这个页面的导航栏和之前有所不同,不过难度并没有增加,只是标题移到了左边,我们使用两端对齐方式就能实现,导航栏部分的具体代码如下:Row(8)Text('消息').fontSize(16)
布局王 布局王
13小时前
HarmonyOS NEXT仓颉开发语言实战案例:动态广场
大家好,今日要分享的是使用仓颉语言开发动态广场页面,也比较像朋友圈页面:整个页面分为两部分,分别是导航栏和状态列表,导航栏比较简单,我们可以先写下导航栏的具体代码和页面的基本结构:ColumnRow(10)Text('推荐').fontColor(Colo
布局王 布局王
13小时前
HarmonyOS NEXT仓颉开发语言实战案例:小而美的旅行App
大家周末好,本文分享一个小而美的旅行app首页,效果图如下:很显然这个页面还是使用List容器,页面两侧有统一的边距,我们可以在List容器统一设置:List(space:20).padding(left:14,right:14,top:62).width
布局王 布局王
13小时前
HarmonyOS NEXT仓颉开发语言实战案例:电影App
大家周末好,今天依然为大家分享之前使用ArkTS实现过的案例,一个电影App,今天使用仓颉的UI再次实现,看看仓颉和ArkTs有哪些相同和不同之处。这个页面的结构比较简单,因为没有导航栏,全都使用List容器实现,最顶部是一个巨大的图片,这个不再演示,继续
布局王 布局王
13小时前
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
各位周末好,今天为大家来仓颉语言外卖App的实战分享。我们可以先分析一下页面的布局结构,它是由导航栏和List容器组成的。幽蓝君目前依然没有找到仓颉语言导航栏的系统组件,还是要自定义,这个导航栏有三部分内容,可以使用两端对齐,要注意的是,如果需要中间部分在