鸿蒙开发实战终极案例--高仿微信App(附源码)

因为最近总写一些入门的教程,肯定也有想要进阶的友友。所以咱们一步到位,做一把微信,可以说是实战的天花板了,话不多说,直接看成品。

本项目对微信首页、聊天界面、通讯录、好友详情、发现、个人信息页面都进行了非常精细的开发。除了朋友圈模块还在开发中,会在后续的文章中发出,再说了吃多了嚼不烂嘛。

幽蓝君希望通过本项目向大家展示如何配置大型项目的基础架构,如何遵循高内聚低耦合的代码规则,如何绘制图形,如何使用自定义组件,以及如何进行复杂界面的布局。总之,日常工作开发中用得到的知识基本上都有涵盖,学会了就放心的去面试吧!!!

基础架构

本项目的基础架构是1个Tabs加4个Navigation,结构图如下:

这里我把项目初始化文件index.ets作为Tabs根控制器,再创建4个文件夹作为项目的4个模块:

在Tabs中加载外部组件记得先引用文件,项目的基础结构代码如下:

import home from './Home/Home';
import contacts from './Contact/Contacts';
import Discover from './Discover/Discover';
import My from './My/My';

@Entry
@Component
struct Index {
  build() {
    Column() {
      Tabs({ barPosition: BarPosition.End, controller: this.controller }) {
        //首页
        TabContent() {
          home()
        }.tabBar()
        //通讯录
        TabContent() {
          contacts()
        }.tabBar()
        //发现
        TabContent() {
          Discover()
        }.tabBar()
        //我
        TabContent() {
          My()
        }.tabBar()
      }
      .vertical(false)
      .barHeight(56)
      .onChange((index: number) => {
        this.currentIndex = index
      })
      .width('100%')
      .height('100%')
      .backgroundColor('#F1F3F5')
    }
    .width('100%')
    .height('100%')
  }
}

接下来就可以分别在子控制器中开发对应的模块了。

首页

首先要注意的是微信、通讯录、发现、我这4个字控制器都是带导航栏的,所以最外部的容器是Navigation(),然后按照效果图配置导航栏的样式,比如首页的导航栏相关代码如下:


build() {

      Navigation(){
        
      }
      .title(this.NavigationTitle())
      .mode(NavigationMode.Stack)
      .titleMode(NavigationTitleMode.Mini)
      .hideBackButton(true)
      .menus(this.NavigationMenus())
      .size({ width: '100%', height: '100%' })
      .backgroundColor('rgb(237,237,237)')
  }
@Builder NavigationMenus() { 
    Row() {
      Image('/images/we_add.png')
        .size({ width: 24, height: 24 })
        .margin({ left: 5 })
        .onClick(()=>{
          animateTo({
            duration: 200,
          }, () => {
            if(this.menuOpacity == 0){
              this.menuOpacity = 1
            }else if(this.menuOpacity == 1){
              this.menuOpacity = 0
            }

          })
        })
    }.justifyContent(FlexAlign.End)
  }

  @Builder NavigationTitle() {
    Row(){
      Text("微信")
        .width('100')
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }

然后首页里比较难就是右上角弹窗了,虽然系统提供了弹窗组件menu,但是样式相差比较大,所以我们需要自己写一个。

弹窗可以分为两个部分,尖尖和矩形列表,它俩是一个Column布局:

这样代码就不难写了,首先绘制一个三角形,再放一个List组件就行了,具体代码如下:


Flex({direction:FlexDirection.Column,justifyContent:FlexAlign.Center}){
              //绘制三角形
              Path()
                .width(20)
                .height(20)
                .commands('M25 0 L50 50 L0 50 Z')
                .fill('rgb(76,76,76)')
                .stroke('rgb(76,76,76)')
                .padding(0)
                .margin(0)
                .position({x:95,y:0})

              //矩形列表
              List(){
                ListItem(){
                  MenuRow({imagePath:'/images/menu_group.png',titleString:'发起群聊'})
                }
                ListItem(){
                  MenuRow({imagePath:'/images/menu_add.png',titleString:'添加朋友'})
                }
                ListItem(){
                  MenuRow({imagePath:'/images/menu_scan.png',titleString:'扫一扫'})
                }
                ListItem(){
                  MenuRow({imagePath:'/images/menu_purchase.png',titleString:'收付款'})
                }
              }
              .margin(0)
              .borderRadius(5)

              .padding({left:12})
              .divider({ strokeWidth: 1, color: 'rgb(130,130,130)', startMargin: 20, endMargin: 0 }) // 每行之间的分界线
              .backgroundColor('rgb(76,76,76)')
              .width(130)
              .height(180)

            }
            .opacity(this.menuOpacity)
            .width(130)
            .height(200)
            .margin({right:10,top:-10})

弹窗开发好了,新的问题来了,怎么样把它放到右上角呢?如果你看过层叠布局Stack的对齐样式,这个问题就不难了,在对齐样式中有一个TopEnd,然后微调一下边距就完成了。

通讯录

这个页面需要讲一下的地方是list组件的分块和右侧字母索引。

可以看到这个节目同一个List列表中出现了不同的样式,即不同的

ListItemGroup,上图中每一个红框为一个ListItemGroup,第一个ListItemGroup比较简单,但是下面3个是包含了itemHead的,代码示例如下:

@Builder itemHead(text:string) {
    Text(text)
      .fontSize(14)
      .backgroundColor(Color.White)
      .width("100%")
      .padding(3)
  }
ListItemGroup({header:this.itemHead(item['letter'])}){
           ListItem(){
                Flex({direction:FlexDirection.Row,alignItems:ItemAlign.Center}){
                  Image(p['avtar'])
                    .width(45)
                    .height(45)
                    .borderRadius(5)
                   Text(p['name'])
                    .fontSize(18)
                    .margin({left:10})
                }
                .height(55)
              }
             })

          }
          .margin({top:10})

字母索引的话用语言不太好讲,直接看代码来的更快:

@State letters: string[] = ['L','W','Z']
AlphabetIndexer({ arrayValue: this.letters, selected: 0 })
    .color(Color.Black)
    .selectedColor(0xFFFFFF) // 选中项文本颜色
    .popupColor(0xFFFAF0) // 弹出框文本颜色
    .selectedBackgroundColor('rgb(1,196,194)') // 选中项背景颜色
    .popupBackground(0xD2B48C) // 弹出框背景颜色
    .usingPopup(true) // 是否显示弹出框
    .selectedFont({ size: 13, weight: FontWeight.Bolder }) // 选中项字体样式
    .popupFont({ size: 30, weight: FontWeight.Bolder }) // 弹出框内容的字体样式
    .itemSize(20) // 每一项的尺寸大小
    .alignStyle(IndexerAlign.Left) // 弹出框在索引条左侧弹出
    .onSelect((index: number) => {
         console.info(this.letters[index] + ' Selected!')
     })
    .onPopupSelect((index: number) => {
      console.info('onPopupSelected:' + index)
     })

至于发现和我这两个模块都比较简单,不再一一赘述。

需要本次内容完整源码,请点击下方链接直接获取

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(Harmony NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

  • 21
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt Quick是Qt框架的一部分,用于开发跨平台的图形界面应用程序。它提供了一套功能强大、易于使用的工具和组件,能够快速地创建现代化的用户界面。 高仿微信是指使用Qt Quick来实现一个与微信界面相似的应用程序。借助Qt Quick的强大功能,可以轻松实现微信中常见的界面元素和交互效果,包括聊天界面、联系人列表、朋友圈等。 Qt Quick使用QML语言编写界面,具有声明式编程的特点,使得开发界面更加直观和灵活。开发者可以通过编写QML代码来描述界面的外观和行为,而无需深入了解底层的图形编程。 除了QML之外,Qt Quick还提供了一组丰富的可重用组件,如按钮、文本框、列表视图等,开发者可以直接使用这些组件来快速构建界面。同时,Qt Quick还支持自定义组件的开发开发者可以根据需要创建自己的独特组件。 在实现高仿微信过程中,可以利用Qt Quick的布局系统来构建复杂的界面布局,使用动画效果和过渡效果来增加用户体验,还可以通过Qt Quick提供的网络模块实现与服务器的通信,实现实时聊天功能。 总之,借助Qt Quick的强大功能和易用性,可以快速开发高仿微信的应用程序,实现类似的界面和功能。无论是从界面还是从交互体验方面,Qt Quick都能满足开发者的需求,并帮助开发者更加高效地开发出优秀的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值