写点什么

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

作者:幽蓝计划
  • 2025-06-29
    山东
  • 本文字数:2682 字

    阅读完需:约 9 分钟

各位好,今日分享一个健身 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 语言 ##仓颉 ##休闲娱乐 #

用户头像

幽蓝计划

关注

还未添加个人签名 2025-05-09 加入

还未添加个人简介

评论

发布
暂无评论
HarmonyOS NEXT仓颉开发语言实战案例:健身App_HarmonyOS NEXT_幽蓝计划_InfoQ写作社区