HarmonyOS 实战项目:WanAndroidApp

环境&指南

API版本 :12
DevStudio版本 :DevEco Studio NEXT Developer Beta1 Build Version: 5.0.3.403, built on June 20, 2024
模拟器 :DevStudio自带模拟器
HarmonyOS官网首页developer.huawei.com/consumer/cn...
HarmonyOS代码仓库gitee.com/openharmony
HarmonyOS API指南developer.huawei.com/consumer/cn...
HarmonyOS DevStudio下载developer.huawei.com/consumer/cn...
WanAndroid官方wanandroid.com/index


简介

通过学习HarmonyOS,实战项目WanAndroid 鸿蒙版,API接口均来自WanAndroid 开源接口,我们一起来做个App吧。

  • App采用分层架构模块化设计MVVM模式 等,布局实现均是原生ArkUI ,。
    功能实现 :开屏页、骨架屏、上拉加载、下拉刷新、状态管理、懒加载、Navigation跨模块页面跳转、瀑布流、Lottie动画、显示动画、属性动画、文字高亮处理等。

  • 界面设计来自个人对App UI理解,合理布局,动画处理,尽量使美感提升,占用时间也是蛮多的。

界面预览

  • 选取主页面和部分页面进行展示

静态预览

首页 学习 广场 我的 体系 导航 问答 搜索 搜索结果 登录 注册

动态预览

实现思路&过程

架构

  • 主体架构采用分层架构 ,产品层+特性层+公共层,分层设计。

  • 分模块设计,例如首页模块、学习模块、广场模块、我的等主题模块

  • 小结 :特性层提供了核心业务模块,公共能力层则提供了一套基础的开发组件和服务,包括公共UI组件、数据存储、网络和工具库。

    模块化不仅是一个设计原则,更是一种开发实践。它旨在将应用程序拆分为多个功能模块,每个功能模块负责特定的功能或特性。功能模块可以独立开发、编译和部署,也可以在不同的设备上灵活组合和调用。

页面

  • 页面拢共分为: 开屏页+ 主体四大板块(首页、学习、广场、我的)+具体页面(搜索页、搜索结果、注册、登录、跳转Web页等)
  • 主要讲讲主体界面开发过程:
  1. 主体是 Navigation + Tabs + TabContent + 自定义TabBar, TabContent则承载4个页面实现
ArkTs 复制代码
Tabs({ index: this.currentIndex,controller:this.mTabController }) {
  TabContent() {
    HomeView()
  }
  TabContent() {
    LearningView()
  }
  TabContent() {
    SquareView()
  }
  TabContent() {
    MineView()
  }
}.layoutWeight(1)
.barHeight(0)
.scrollable(false)
.onChange((index) => {
  this.currentIndex = index;
})
CustomTabBar({ currentIndex: $currentIndex })
  1. 首页实现骨架屏,加载失败页,主体页面 上拉加载,下拉刷新 固定头部View + List 主要通过条件控制渲染,根据状态渲染现骨架屏,加载失败页。LazyForEach 懒加载文章Item 。

  2. 学习页面开发,嵌套3个TabContent 《体系》、《导航》、《问答》板块,实现左右滑动,上拉加载,下拉刷新,首次展示骨架屏,每个页面为了保持不同的展示风格,采用不同的Item展示,《体系》采用大类目Item ,《导航》采用吸顶Item 展示类目,《问答》采用瀑布流Item,高度是随内用撑开的。总体界面简约为主。

  3. 广场页面开发,骨架屏+背景图+展示公众号tag+ List列表懒加载数据,这里加入搜索图标变化动画,采用属性动画,根据位置变化,触发动画。背景图下拉变大效果,则采用手势下拉Y轴变化,对背景图的高度变化处理。

ArkTs 复制代码
  .onDidScroll((yOffset: number) => {
    //当列表滚动时,限制列表的下拉操作
    if (yOffset > 0) {
      this.canPullDown = false;
    }
  })
  .parallelGesture(PanGesture({ direction: PanDirection.Down })
    .onActionUpdate((event?: GestureEvent) => {
      this.handleGestureEvent(event)
    })
    .onActionEnd(() => {
      animateTo({ duration: 300, curve: Curve.LinearOutSlowIn }, () => {
        this.offsetY = 0;
      })
    })
  )
}

5.我的页面开发,整体采用Scroll+Colum 进行布局,加入第三方动画实现lottie,提升App整体美感。具体有Lottie 使用如下:

ArkTs 复制代码
Canvas(this.mainCanvasRenderingContext)
  .height(CommonConstants.FULL_PERCENT)
  .width(CommonConstants.FULL_PERCENT)
  .onReady(() => {
    // this.mainCanvasRenderingContext.imageSmoothingEnabled = true;
    // this.mainCanvasRenderingContext.imageSmoothingQuality = 'medium'
    LottieUtil.loadAnimation({
      container: this.mainCanvasRenderingContext,
      renderer: 'canvas',
      loop: true,
      autoplay: true,
      name: "Mine",
      path: this.path
    })
   
  })
  .onVisibleAreaChange([1, 0], (isVisible: boolean, currentRatio: number) => {
    if (isVisible) {
      LottieUtil.play("Mine")
    } else {
      LottieUtil.stop("Mine")
    }
  })

步骤是:加载,播放,这边对播放进行控制,在不可见的时候进行停止播放,进行了边界判断

总结

通过此次实战,实现WanAndroid 大部分功能。第三方库使用:axios网络请求,Lottie动画库。其他均为原生,可见用原生可以快速构建App,不像Android,想实现一些功能需要大量的自定义和第三方库,总体工程量还是蛮大的,UI设计和代码编对然对比Android有所减少,但是有些必要的工作还是蛮多的。
本文正在参加华为鸿蒙有奖征文征文活动

相关推荐
枫叶丹43 小时前
【HarmonyOS之旅】HarmonyOS开发基础知识(三)
华为od·华为·华为云·harmonyos
SoraLuna8 小时前
「Mac畅玩鸿蒙与硬件47」UI互动应用篇24 - 虚拟音乐控制台
开发语言·macos·ui·华为·harmonyos
AORO_BEIDOU12 小时前
单北斗+鸿蒙系统+国产芯片,遨游防爆手机自主可控“三保险”
华为·智能手机·harmonyos
博览鸿蒙13 小时前
鸿蒙操作系统(HarmonyOS)的应用开发入门
华为·harmonyos
Damon小智20 小时前
HarmonyOS NEXT 技术实践-基于基础视觉服务的多目标识别
华为·harmonyos
爱笑的眼睛112 天前
uniapp 极速上手鸿蒙开发
华为·uni-app·harmonyos
K.P2 天前
鸿蒙元服务从0到上架【第三篇】(第二招有捷径)
华为·harmonyos·鸿蒙系统
K.P2 天前
鸿蒙元服务从0到上架【第二篇】
华为·harmonyos·鸿蒙系统
敲代码的小强2 天前
Flutter项目兼容鸿蒙Next系统
flutter·华为·harmonyos
程序猿会指北2 天前
纯血鸿蒙APP实战开发——Text实现部分文本高亮和超链接样式
移动开发·harmonyos·arkts·openharmony·arkui·组件化·鸿蒙开发