HarmonyOS应用开发者的宝藏APP-HMOS代码工坊-组件堆叠滑动折叠效果(一)

前言

今天我们来拆解复刻一下HMOS代码工坊中的组件堆叠滑动折叠效果

当然这个是有源码的,但不妨碍我们自己先思考一下,工作中遇到其他效果也能自己实现。

先看下效果图

拆解页面

页面结构

大致划分为四个部分:

  1. 顶部的个人头像和扫码效果
  2. 搜索框:好物精选
  3. 笔记本、智慧屏、音箱
  4. 分类和商品列表

动画效果

  1. 搜索框好物精选模块在页面向上滑动时高度逐渐变小,最终高度固定,覆盖顶部的个人头像和扫码图标
  2. 第三部分笔记本、智慧屏、音箱在上滑过程中一直处于搜索框底部,然后逐渐透明。最终替换为横向滑动的列表
  3. 替换为横向滑动列表时,横向列表由透明变为不透明,列表项目间距逐渐变小
  4. 在上滑过程中分类逐渐缩小,并且透明度逐渐降低,目测看起来透明度和第三部分一致。
  5. 在下滑过程中上述效果反转

思路

整个页面是可以滑动的,并且在搜索框高度不再变化且固定在顶部的时候,底部分类和商品列表是可以继续滑动的。因此页面需要两个滑动组件嵌套。

  1. 监听外部滑动组件的滑动事件,根据滑动距离计算搜索框高度
  2. 监听内部滑动组件的滑动事件,根据滑动距离计算如下数据
    • 第三部分透明度
    • 是否将第三部分替换为横向滑动列表
    • 横向滑动列表的透明度
    • 横向滑动列表的列表项间距
    • 第四部分分类的大小和透明度
  3. 向上滑动时需要覆盖顶部的第一部分,可以用Stack来布局
  4. 向上滑动时,当第三部分替换为横向滑动列表之后,继续向上滑动底部第四部分的商品列表需要被横向滑动列表覆盖,这里也可以用Stack布局,层次可以用zIndex属性控制

实现

先来实现前两个部分,比较简单: 最外层是一个Stack,顶部对齐,包含一个RowScroll。由于Scroll只能包含一个直接子控件,添加一个Column,在这个Column中来写我们的滑动布局。 滑动时搜索框高度需要动态变化,这里我们定义一个变量表示搜索框高度。在ScrollonScrollFrameBegin回调中计算搜索框高度值。

typescript 复制代码
  build() {
    Stack({alignContent:Alignment.Top}) {
      Row(){
        Text("UserIcon")
        Blank().height(0)
        Text("Scan")
      }.width("100%").height(50).alignItems(VerticalAlign.Center).padding({left:15,right:15}).backgroundColor(Color.Green)

      Scroll(this.outSideScrollController){
        Column(){
          Row().height(this.searchAreaHeight).width("100%").borderColor(Color.Red).borderRadius(12).backgroundColor(Color.Blue)
        }.margin({top:50}).height("100%").justifyContent(FlexAlign.Start)
      }.padding({left:15,right:15}).height("100%").width("100%")
      .onScrollFrameBegin((offset:number,state:ScrollState)=>{
        let yOffset = this.outSideScrollController.currentOffset().yOffset
				//为了有一个视差效果,这里设置一个系数
        this.searchAreaHeight = 100 - yOffset * 0.6
        return {offsetRemain:offset}
      })

    }.backgroundColor("#f1f1f1")
    .height('100%')
    .width('100%')
  }

看起来效果还行,替换一下素材 这样我们就先完成了简单的前两个部分。下一篇我们继续实现接下来的部分。


【 更多精彩内容,请关注公众号:【名称:HarmonyOS开发者技术,ID:HarmonyOS_Dev】;也欢迎加入鸿蒙开发者交流群:work.weixin.qq.com/gm/48f89e7a...

相关推荐
提子拌饭1332 小时前
风息时钟:鸿蒙Flutter 实现的自然风格时钟应用
flutter·华为·架构·开源·harmonyos
浮芷.5 小时前
Flutter 框架跨平台鸿蒙开发 - AR动物互动应用
flutter·ar·harmonyos
加农炮手Jinx7 小时前
Flutter 组件 conventional 适配鸿蒙 HarmonyOS 实战:约定式提交标准,构建自动化版本治理与 CI/CD 质量治理架构
flutter·harmonyos·鸿蒙·openharmony
王码码20357 小时前
Flutter 三方库 appstream 的鸿蒙化适配指南 - 驾驭 Linux 生态元数据规范,打造高性能、标准化、国际化的 OpenHarmony 桌面应用商店分发基石
flutter·harmonyos·鸿蒙·openharmony
见山是山-见水是水7 小时前
Flutter 框架跨平台鸿蒙开发 - AR植物养护助手
flutter·华为·ar·harmonyos
autumn20058 小时前
Flutter 框架跨平台鸿蒙开发 - 历史人物对话
服务器·flutter·华为·harmonyos
autumn20058 小时前
Flutter 框架跨平台鸿蒙开发 - 社区闲置循环
flutter·华为·harmonyos
chenbin___8 小时前
在鸿蒙手机上,measure 和 measureInWindow 返回的 y / pageY 在滑动组件后值不变问题
华为·智能手机·harmonyos
浮芷.9 小时前
Flutter 框架跨平台鸿蒙开发 - 家庭健康监测云应用
科技·flutter·华为·harmonyos·鸿蒙
世人万千丶10 小时前
Flutter 框架跨平台鸿蒙开发 - 宠物语言翻译器应用
学习·flutter·华为·开源·harmonyos·鸿蒙