HarmonyOS 首页框架问题

目前项目首页面MainPage是用Tabs实现的,并且.scrollable(true)//允许滑动。部分代码如下:

TabContent() {  
//健康首页  
  Health({index:this.currentIndex})  
}

问题如下:

现在想Health()健康首页,实现如下面交互效果,请问应该用什么组件相结合的方式实现呢?具体需求。

1、顶部可左右滑动可点击。

2、顶部和主页面内容联动。

3、主页面内容可上下滑动,可能会嵌套Swiper。

4、假设首页面滑动到了最后一个,再滑动应该滑动到商城。

HarmonyOS
2024-09-29 11:17:20
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可以参考以下代码:

@Entry  
@Component  
struct TabViewDemo {  
  @State currentIndex: number = 0;  
  @State subCurrentIndex: number = 0;  
  private controller: TabsController = new TabsController();  
  private subController: TabsController = new TabsController();  
  private panOptionLeft: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Left });  
  private panOptionRight: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Right });  
  private scroller: Scroller = new Scroller()  
  private title: string[] =  
    ['aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'iiii', 'jjjj']  
  build() {  
    Tabs({ barPosition: BarPosition.End, index: this.currentIndex, controller: this.controller }) {  
      TabContent() {  
        this.HealthTab()  
      }  
      .tabBar('健康')  
      TabContent() {  
      }  
      .tabBar('商城')  
      TabContent() {  
      }  
      .tabBar('消息')  
      TabContent() {  
      }  
      .tabBar('我的')  
    }  
    .animationDuration(400)  
    .onChange((index: number) => {  
      this.currentIndex = index  
    })  
  }  
  @Builder  
  HealthTab() {  
    Column() {  
      Row() {  
        List({ space: 5, scroller: this.scroller }) {  
          ForEach(this.title, (item: string, index: number) => {  
            ListItem() {  
              Column() {  
                Text(item)  
                  .fontWeight(this.subCurrentIndex === index ? FontWeight.Bold : FontWeight.Normal)  
                Column()  
                  .height(4)  
                  .width(40)  
                  .backgroundColor(Color.Black)  
                  .visibility(this.subCurrentIndex === index ? Visibility.Visible : Visibility.None)  
              }  
              .justifyContent(FlexAlign.SpaceEvenly)  
              .width('100%')  
              .height('100%')  
            }  
            .onClick(() => {  
              this.subCurrentIndex = index  
              this.subController.changeIndex(index)  
              this.scroller.scrollToIndex(index, true, ScrollAlign.CENTER)  
            })  
            .height('100%')  
            .width('100')  
          })  
        }  
        .height('100%')  
        .scrollBar(BarState.Off)  
        .listDirection(Axis.Horizontal)  
      }  
      .alignItems(VerticalAlign.Center)  
      .height('10%')  
      Tabs({ barPosition: BarPosition.Start, controller: this.subController }) {  
        ForEach(this.title, (item: string, index: number) => {  
          if (index === 0) {  
            TabContent() {  
              Scroll() {  
                Text("我是页面 的内容")  
                  .height(1000)  
                  .width('100%')  
                  .fontSize(30)  
              }  
            }  
            .backgroundColor('#00CB87')  
            .gesture(PanGesture(this.panOptionRight)  
              .onActionEnd(() => {  
                this.controller.changeIndex(0)  
              }))  
          } else if (index === this.title.length - 1) {  
            TabContent() {  
            }  
            .backgroundColor('#ffd505fa')  
            .gesture(  
              PanGesture(this.panOptionLeft)  
                .onActionEnd(() => {  
                  this.controller.changeIndex(1)  
                })  
            )  
          } else {  
            TabContent() {  
            }  
            .backgroundColor(0x123456 + index * 50)  
          }  
        })  
      }  
      .barHeight(0)  
      .animationDuration(400)  
      .onChange((index: number) => {  
        this.subCurrentIndex = index;  
        this.scroller.scrollToIndex(index, true, ScrollAlign.CENTER)  
      })  
      .barMode(BarMode.Scrollable)  
      .width('100%')  
    }  
    .width('100%')  
  }  
}
分享
微博
QQ
微信
回复
2024-09-29 18:05:40
相关问题
HarmonyOS 消息首页框架实现
200浏览 • 1回复 待解决
HarmonyOS 应用首页技术选型问题
218浏览 • 1回复 待解决
HarmonyOS视频流缓存框架问题
256浏览 • 1回复 待解决
HarmonyOS 首页下拉刷新异常
172浏览 • 1回复 待解决
元数据绑定框架使用问题
5909浏览 • 1回复 待解决
基于加解密算法框架的规格问题
652浏览 • 1回复 待解决
框架native侧文件读取权限问题
1667浏览 • 1回复 待解决
HarmonyOS 开发基础框架
231浏览 • 1回复 待解决
HarmonyOS Navigation UI框架
195浏览 • 1回复 待解决
首页LazyForEach predict耗时久分析
780浏览 • 1回复 待解决
HarmonyOS启动框架AppStartup咨询
374浏览 • 1回复 待解决
HarmonyOS图片加载框架ImageKnife
313浏览 • 1回复 待解决
HarmonyOS 项目框架模块搭建
422浏览 • 1回复 待解决
HarmonyOS 数据库框架
283浏览 • 1回复 待解决
HarmonyOS 是否接入React Native框架
77浏览 • 1回复 待解决
鸿蒙UI框架没有 C++的 UI框架
13290浏览 • 2回复 待解决