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...

相关推荐
lilian2333 小时前
HarmonyOS 7 新特性(二十五)|智慧手势:意图识别与误触治理
华为·harmonyos
贾伟康5 小时前
【时光清单|14】HarmonyOS ArkTS 主导航实战:统一页面入口、返回路径和参数校验
harmonyos·arkts·arkui·navigation·路由管理
贾伟康10 小时前
【时光清单|05】HarmonyOS ArkTS 倒计时卡片实战:适配 2x2、2x4 与 4x4 多尺寸
harmonyos·arkts·arkui·服务卡片·formextensionability
小雨青年10 小时前
【HarmonyOS 7 悬浮页签深度实战】07 折叠屏、平板与宽窗口的布局适配
华为·harmonyos
熊猫钓鱼>_>12 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos
大锅盖112 小时前
HarmonyOS ArkUI 非遗纹样素材平台设计复盘:朱砂宣纸与鎏金黛蓝的文化守护
华为·harmonyos
2501_9197490313 小时前
华为鸿蒙管理学习生活与工作APP—小羊管理
学习·华为·生活·harmonyos·鸿蒙
贾伟康13 小时前
【时光清单|20】HarmonyOS ArkTS AppGallery 发布复查实战:核对包名、版本、设备、素材和离线声明
harmonyos·arkts·agc·appgallery·发布复查
lilian23314 小时前
HarmonyOS 7 新特性(二十三)|hiprofiler + hidumper:跨堆内存分析
华为·harmonyos
嵌入之梦15 小时前
鸿蒙OS IoT设备开发之基础 —— 外设驱动
物联网·华为·harmonyos