昨天Mate70的官方预热直接引起网络爆炸,现在预约人数已经两百多万了,大家都这么有米吗

今天跟大家分享一个银行app实战教程。

页面虽然看起来比较复杂,但是仔细分析一下并不难,下面跟大家分享一下本项目的一些难点。

首先是首页的导航栏,这个导航栏看起来没什么特别,不过它是一个可以变化的导航栏,在页面滑动的过程中,导航栏的背景色会从透明变为白色。

系统的导航栏无法满足需求,所以我们需要自定义一个导航栏。

这个导航栏的内容部分比较简单,中间标题加两侧按钮,布局为SpaceBetween,相关代码如下:

Row(){
Image($r('app.media.scan'))
.width(22)
.height(22)
Text('我的资产')
.width(120)
.textAlign(TextAlign.Center)
.fontColor('#1a1a1a')
.fontSize(16)
.fontWeight(FontWeight.Bold)
Image($r('app.media.ss'))
.width(22)
.height(22)
.onClick(()=>{
router.pushUrl({
url:'pages/Found'
})
}
)}
.width('100%')
.justifyContent(FlexAlign.SpaceBetween)
.padding({left:12,right:12,top:px2vp(this.topRectHeight) + 12,bottom:12})
.backgroundColor('rgba(255,255,255,'+this.titleAlpha+')')

接下来我们要处理它的颜色变化。我们想要页面向上滑动到第二个单元的时候导航栏变为白色背景,在页面向下滑动到头的时候导航栏变为透明背景,这里可以使用list组件的onScrollIndex方法来实现,相关代码如下:

.onScrollIndex((start,end)=>{
if(start == 0 && end == 4){
if(this.havaStarted){
this.titleAlpha = '1'
}
}
if(start == 0 && end == 3){
if(this.havaStarted){
this.titleAlpha = '0'
}
}
})

首页里除导航栏以外的部分都比较简单,主要就是一个List组件,把每个部分拆分出来以后就是简单的横向或者纵向布局,以头部总资产部分为例,就是一个比较简单的横向布局,相关代码如下:

Stack({alignContent:Alignment.Center}){  Image($r('app.media.nav_img'))    .width('100%')  Row(){    Column({space:6}){      Row(){        Text('总资产')          .fontSize(13)          .fontColor(Color.Black)        Image($r('app.media.eyes'))          .width(14)          .height(10)          .margin({left:5})          .onClick(()=>{            this.showMoney = !this.showMoney          })      }      Text(this.showMoney? '2000':'****')        .fontSize(30)        .fontColor(Color.Black)        .fontWeight(FontWeight.Bold)      Text('今日收益 +13.3')        .fontSize(12)        .fontColor(Color.Gray)    }    .alignItems(HorizontalAlign.Start)    .margin({left:26})    Row(){      Image($r('app.media.shield'))        .width(16)        .height(16)      Text('开启保障')        .fontColor(Color.White)        .fontSize(13)        .margin({left:6})    }    .width(102)    .height(30)    .justifyContent(FlexAlign.Center)    .backgroundColor('rgba(0,0,0,0.1)')    .borderRadius({topLeft:15,bottomLeft:15})  }  .width('100%')  .justifyContent(FlexAlign.SpaceBetween)}

还有一个部分要注意,像热门推荐、稳健理财等部分,他们的标题可以使用List中Group的header来实现,这样实现的代码就比较简洁:

@Builder ListGroupHeader(title:string,subTitle:string){
Row({space:5}){
Text(title)
.fontColor(Color.Black)
.fontSize(18)
.fontWeight(FontWeight.Bold)
Text(subTitle)
.fontColor(13)
.fontColor('#999999')
}
.height(60)
.width('100%')
.padding({left:12,bottom:13})
.alignItems(VerticalAlign.Bottom)
}

以上就是本项目的一些难点。

鸿蒙Next开发实战教程--银行App的更多相关文章

  1. Swift游戏开发实战教程(霸内部信息大学)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...

  2. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

    上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...

  3. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

    上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...

  4. 微信小程序-云开发实战教程

    微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...

  5. Python开发实战教程(8)-向网页提交获取数据

    来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知 ...

  6. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  7. HTML5 App商业开发实战教程 基于WeX5可视化开发平台

  8. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发

    进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...

  9. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作

    /****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT ...

  10. android开发实战-记账本APP(二)

    继昨天的开发,继续完成今天的内容. (一)开始构建一些业务逻辑,开始构建记账本的添加一笔记账的功能. ①对fab按钮的click时间进行修改,创建一个AlertDialog.Builder对象,因此我 ...

随机推荐

  1. Vulnhub-kioptix2014靶机getshell及提权

    靶机搭建 点击扫描虚拟机 然后扫描文件夹即可 信息收集 扫描ip nmap扫描得到目标靶机ip nmap -sn 192.168.108.0/24 故 攻击机:192.168.108.130 目标靶机 ...

  2. [翻译] 为什么 Tracebit 用 C# 开发

    原文: [Why Tracebit is written in C#] 作者: [Sam Cox (Tracebit联合创始人兼CTO)] 译者: [六六] (译注:Tracebit成立于2022年, ...

  3. autMan奥特曼机器人-安装或更新golang依赖

    autMan2.3.4及以上需要更新中间件或安装golang依赖,参照下列步骤: 一.直装版本 ssh下进入autMan文件夹下plugin/scripts下面输入以下指令: go get -u gi ...

  4. Archlinux 更新失败之驱动与 Xorg 配置错误

    Archlinux系统更新是滚动更新,所以更新失败又被叫做"滚挂了" 此次滚挂发生在1月27日,过了那么久了才想起来该记录了-- 现象 滚挂的现象是,能够进系统,但是笔记本电脑自带 ...

  5. AI 插件第二弹,更强更好用

    概述 插件大更新 前一周, 我们开源了一个 AI 插件,发了一篇介绍的文章 DeepSeek 插件开源上线!支持多家云服务,一键解锁满血版 AI 引来了一些小小的反响,也有用户在评论区或者私底下提了一 ...

  6. 展开说说关于C#中ORM框架的用法!

    Entity Framework(EF)是微软提供的一个开源的对象关系映射(ORM)框架,用于.NET应用程序.它经历了多个版本的演进,主要分为两大分支:Entity Framework 6 (EF6 ...

  7. MySQL时间溢出原理、实战影响与全面解决方案

    一.问题背景与现象复现 操作场景: 本文将手把手带您了解mysql时间溢出原理.实战影响与全面解决方案,所有代码均通过dblens for mysql数据库工具验证,推荐使用该工具进行可视化数据库管理 ...

  8. Supac 如何修改地址界限高层点

    编辑->图层->运算 2.选择z ->填写高度 如-180阶段 3.保存

  9. cypress 在 typescript 项目中报错找不到 'tslib'

    原文链接:https://blog.jijian.link/2020-08-11/cypress-typescript-cannot-find-module-tslib/ cypress 在 type ...

  10. 浅说树形dp

    @ 目录 前言 树形dp的转移方式 树形dp的使用的场景 小结 初步感知--简单的树形dp 例题1 例题2 深入分析--树形dp的经典模型 最大独立集 最小点覆盖 最小支配集 树上直径 前言 因为树的 ...