各位好,今日分享一个健身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语言##仓颉##休闲娱乐#
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |