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

HarmonyOS NEXT仓颉开发语言实战案例:健身App的更多相关文章

  1. 谷歌推出全新Android开发语言Sky:让App更流畅

    土豆网同步更新:http://www.tudou.com/plcover/VHNh6ZopQ4E/   使用HTML 创建Mac OS App 视频教程. 官方QQ群: (1)App实践出真知 434 ...

  2. Swift语言实战晋级

    Swift语言实战晋级基本信息作者: 老镇 丛书名: 爱上Swift出版社:人民邮电出版社ISBN:9787115378804上架时间:2014-12-26出版日期:2015 年1月开本:16开页码: ...

  3. 如何从40亿整数中找到不存在的一个 webservice Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库 WPF实战案例-打印 RabbitMQ与.net core(五) topic类型 与 headers类型 的Exchange

    如何从40亿整数中找到不存在的一个 前言 给定一个最多包含40亿个随机排列的32位的顺序整数的顺序文件,找出一个不在文件中的32位整数.(在文件中至少确实一个这样的数-为什么?).在具有足够内存的情况 ...

  4. Python开发GUI实战:图片转换素描画工具!

    奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . ​ 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...

  5. Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析

    1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...

  6. 盘它!基于CANN的辅助驾驶AI实战案例,轻松搞定车辆检测和车距计算!

    摘要:基于昇腾AI异构计算架构CANN(Compute Architecture for Neural Networks)的简易版辅助驾驶AI应用,具备车辆检测.车距计算等基本功能,作为辅助驾驶入门级 ...

  7. Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-1

    学习目标 一.进一步学习Swift的游戏制作 二.掌握SKNode,SKSpriteNode的运用 三.了解SpriteKit的物理系统 四.掌握动作(SKAction)的运用 在这一章,我们要通过制 ...

  8. 用grunt搭建自动化的web前端开发环境实战教程(详细步骤)

    用grunt搭建自动化的web前端开发环境实战教程(详细步骤) jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用!前端自动化, ...

  9. C# Xamarin移动开发项目实战篇

    一.课程介绍 在前面阿笨的<C# Xamarin移动开发基础进修篇>课程中,大家已经熟悉和了解了Xamarin移动App开发的基础知识和原理.本次分享课<C# Xamarin移动开发 ...

  10. 《数据挖掘:R语言实战》

    <数据挖掘:R语言实战> 基本信息 作者: 黄文    王正林 丛书名: 大数据时代的R语言 出版社:电子工业出版社 ISBN:9787121231223 上架时间:2014-6-6 出版 ...

随机推荐

  1. 3D Gaussian 三维视觉重建

    论文资料 论文 https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gaussian_splatting_low.pdf 资料网站 ...

  2. Docker 实用镜像

    实用镜像 nginx-proxy nginx-proxy sets up a container running nginx and docker-gen. ...

  3. 《机器人SLAM导航核心技术与实战》第1季:第5章_机器人主机

    <机器人SLAM导航核心技术与实战>第1季:第5章_机器人主机 视频讲解 [第1季]5.第5章_机器人主机-视频讲解 [第1季]5.1.第5章_机器人主机_X86与ARM主机对比-视频讲解 ...

  4. 事务注解@Transactional

    目录 1.属性介绍 2.传播机制 准备例子 总结 3.原理 4.失效场景 一.属性介绍 1.isolation 属性 事务的隔离级别,默认值为 Isolation.DEFAULT.可选的值有: Iso ...

  5. 💻开源项目介绍-NewsNow-优雅的实时新闻聚合平台

    news.zktww.vip 引言 在信息洪流中,如何优雅地获取新闻? 在当今信息爆炸的时代,我们每天需要在微博.知乎.Twitter.GitHub等平台间频繁切换,才能捕捉到最新的热点动态. New ...

  6. 最小生成树 & 严格次小生成树

    最小生成树 何为最小生成树? 有一类问题:给定一张图,可以删除若干条边,在不改变连通性(一般是全联通)的情况下,权值和最小的方案是什么?没错,这就是最小生成树问题(MST问题).那么基本性质其实连聪明 ...

  7. 【笔记】PyVis|神经网络数据集的可视化

    文章目录 版本: 应用实例: PyVis的应用: 零.官方教程 一.初始化画布`Network` 二.添加结点 添加单个结点`add_node`: 添加一系列结点`add_nodes`: 三.添加边 ...

  8. .NET 原生驾驭 AI 新基建实战系列(七):Weaviate ── 语义搜索的智能引擎创新者

    引言 随着人工智能和机器学习技术的迅猛发展,向量数据在推荐系统.自然语言处理.图像搜索等领域的应用日益广泛.传统的数据库在处理高维向量数据时往往面临性能瓶颈,而向量数据库的出现为这一问题提供了高效的解 ...

  9. TVM: VisitExpr流程分析

    TVM源码中涉及到表达式遍历的地方,一般是适用VisitExpr接口进行,这个接口设计TVM的visitor模式,具体分析可参考:TVM:visitor设计模式 基类tvm::relay::ExprF ...

  10. 解决github无法访问的问题,亲测有效--很强

    参考:https://segmentfault.com/a/1190000037498373 ubuntu系统:在/etc/hosts文件中增加以下内容: windows系统:C:\Windows\S ...