HarmonyOS ArkUI滚动类组件-Scroll、Scroller

Scroll 作为可滚动的容器类组件,它最多包含一个子组件,当子组件的布局尺寸在指定的滚动方向上超过 Scroll 的视图窗口时,子组件可以滚动, Scroll 滚动方向只支持水平滚动和竖直滚动。 Scroller 作为滚动组件的控制器,它可以控制滚动组件的一些行为,比如滚动到特定位置,滚动到边界等。

Scroll定义介绍

interface ScrollInterface {
  (scroller?: Scroller): ScrollAttribute;
}
  • scroller :给 Scroll 绑定一个滚动控制器,该控制器可以控制子组件的各种滚动能力, Scroller 目前只支持绑定到 ScrollList

简单样例如下所示:

Scroll() {
  Text('Text1')// 子组件的高度小于Scroll高度,不会触发滚动
    .fontSize(26)
    .size({width: 180, height: 40})
    .backgroundColor('#aabbcc')
}
.width('100%')
.height(100)
.backgroundColor(Color.Pink)

Scroll属性介绍

declare class ScrollAttribute<T> extends CommonMethod<T> {
  scrollable(value: ScrollDirection): T;
  scrollBar(barState: BarState): T;
  scrollBarColor(color: Color | number | string): T;
  scrollBarWidth(value: number | string): T;
  edgeEffect(edgeEffect: EdgeEffect): T;
}
  • scrollable :设置 Scroll 的滚动方向, ScrollDirection 提供了以下 3 种滚动方向:

    • Vertical(默认值):仅支持竖直方向滚动。

          Scroll() {// Scroll没有设置滚动方向,默认竖直方向滚动
            Column() {
              Text('Text1')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#aabbcc')
              Text('Text2')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#bbccaa')
              Text('Text3')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#ccaabb')
              Text('Text4')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#abcabc')
            }
            .width('100%')
          }
          .width(230)
          .height(200)
          .backgroundColor(Color.Pink)
      
  • Horizontal:仅支持水平方向滚动。

          Scroll() {
            Row() {
              Text('Text1')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#aabbcc')
              Text('Text2')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#bbccaa')
              Text('Text3')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#ccaabb')
              Text('Text4')
                .fontSize(26)
                .size({width: 180, height: 90})
                .backgroundColor('#abcabc')
            }
            .height("100%")
          }
          .scrollable(ScrollDirection.Horizontal)// 设置滚动条水平方向滚动
          .width(230)
          .height(170)
          .backgroundColor(Color.Pink)
    
    • None:不可滚动。子组件即使超界了,也不能滚动。
  • scrollBar :设置滚动条状态, BarState 定义了以下 3 种状态:

    • Off:不显示滚动条。
    • On:一直显示滚动条。
    • Auto:按需显示(触摸时显示,2s后消失)。
  • scrollBarColorscrollBarWidth:设置滚动条的颜色和宽度,

简单样例如下所示:

    Scroll() {
      Column() {
        Text('Text1')
          .fontSize(26)
          .size({width: 180, height: 90})
          .backgroundColor('#aabbcc')
        Text('Text2')
          .fontSize(26)
          .size({width: 180, height: 90})
          .backgroundColor('#bbccaa')
        Text('Text3')
          .fontSize(26)
          .size({width: 180, height: 90})
          .backgroundColor('#ccaabb')
        Text('Text4')
          .fontSize(26)
          .size({width: 180, height: 90})
          .backgroundColor('#abcabc')
      }
    }
    .scrollable(ScrollDirection.Vertical) // 竖直滚动
    .scrollBarColor(Color.Green)          // 设置滚动条颜色
    .scrollBarWidth(20)                   // 设置滚动条宽度
    .scrollBar(BarState.On)               // 设置滚动条永久显示
    .width(230)
    .height(170)
    .backgroundColor(Color.Pink)

Scroll事件介绍

declare class ScrollAttribute<T> extends CommonMethod<T> {
  onScroll(event: (xOffset: number, yOffset: number) => void): T;
  onScrollEdge(event: (side: Edge) => void): T;
  onScrollEnd(event: () => void): T;
}
  • onScroll:滚动事件回调, 返回滚动时水平、竖直方向的偏移量。
  • onScrollEdge:滚动到边缘事件回调。
  • onScrollEnd:滚动停止事件回调。

Scroller简单介绍

Scroller 作为滚动容器组件的控制器,它提供了滚动子组件的各种能力,比如设置子组件滚动指定位置、滚动到底部以及滚动到下一页上一页等能力。目前 Scrolller 只支持绑定到 ScrollList 上。

Scroller 定义如下:

export declare class Scroller {
  scrollTo(value: {
    xOffset: number | string, yOffset: number | string, animation?: { duration: number, curve: Curve }
  });
  scrollEdge(value: Edge);
  scrollPage(value: { next: boolean, direction?: Axis });
  currentOffset();
  scrollToIndex(value: number);
}
  • scrollTo :设置子组件滚动到指定位置,在滚动的时候还可以根据 animation 参数设置动画。
  • scrollEdge :滚动到边界, Edge 提供了多种类型,读者可自行查阅。
  • scrollPage:滚动到上一页或者下一页。
  • currentOffset:获取当前滚动的偏移量。
  • scrollToIndex :滚动到指定下标,目前只支持 List

完整样例

Scroll 结合 Scrollerr 完整样例如下所示:

@Entry @Component struct ComponentTest {

  private scroller: Scroller = new Scroller(); // 创建一个滚动控制器
  private scrollDistance: number = 0;
  private items: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  build() {

    Column() {
      Scroll(this.scroller) {                  // 绑定滚动控制器
        Column() {
          ForEach(this.items, (item) => {      // ForEach语法循环创建子组件
            Text("index: " + item)
              .fontSize(26)
              .width('90%')
              .height(120)
              .borderRadius(10)
              .backgroundColor(Color.White)
              .margin({top: 10})
          })
        }
        .width("100%")
      }
      .scrollable(ScrollDirection.Vertical)    // 设置竖直方向滚动
      .scrollBarColor(Color.Green)             // 设置滚动条颜色
      .scrollBarWidth(20)                      // 设置滚动条宽度
      .scrollBar(BarState.On)                  // 设置滚动条永久显示
      .width('100%')
      .height(220)
      .padding({top: 10, bottom: 10})
      .backgroundColor(Color.Pink)

      Flex({direction: FlexDirection.Row, wrap: FlexWrap.NoWrap, justifyContent: FlexAlign.SpaceBetween}) {
        Button('scrollTo')
          .onClick(() => {
            this.scrollDistance = this.scrollDistance == 0 ? 280 : 0;
            this.scroller.scrollTo({           // 调用scrollTo滚动到具体位置
              xOffset: 180,                    // 竖直方向滚动,该值不起作用
              yOffset: this.scrollDistance,    // 滚动距离
              animation: {                     // 滚动动画
                duration: 1500,
                curve: Curve.Smooth
              }
            })
          })
        Button('scrollEdge')
          .onClick(() => {
            this.scroller.scrollEdge(Edge.End) // 滚动到底部
          })

        Button('scrollPage')
          .onClick(() => {
            this.scroller.scrollPage({         // 滚动到下一页
              next: true,
              direction: Axis.Vertical
            })
          })
      }
      .width('100%')
      .margin({top: 10})
    }
    .alignItems(HorizontalAlign.Center)
    .width('100%')
    .height(('100%'))
    .padding(20)
  }
}

码牛课堂 也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术 ,针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等 人群,整理了一套纯血版鸿蒙(HarmonyOS Next)全栈开发技术的学习路线。大家可以进行参考学习:https://qr21.cn/FV7h05

①全方位,更合理的学习路径

路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块,六大实战项目贯穿始终,由浅入深,层层递进,深入理解鸿蒙开发原理!

②多层次,更多的鸿蒙原生应用

路线图将包含完全基于鸿蒙内核开发的应用,比如一次开发多端部署、自由流转、元服务、端云一体化等,多方位的学习内容让学生能够高效掌握鸿蒙开发,少走弯路,真正理解并应用鸿蒙的核心技术和理念。

③实战化,更贴合企业需求的技术点

学习路线图中的每一个技术点都能够紧贴企业需求,经过多次真实实践,每一个知识点、每一个项目,都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果,注重对学生的细致教学,每一步都确保学生能够真正理解和掌握。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:https://qr21.cn/FV7h05

如何快速入门:

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ......

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ......

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ......

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

大厂鸿蒙面试题::https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题

2.性能优化方向

3.架构方向

4.鸿蒙开发系统底层方向

5.鸿蒙音视频开发方向

6.鸿蒙车载开发方向

7.鸿蒙南向开发方向

相关推荐
冯志浩8 小时前
Harmony NEXT:如何给数据库添加自定义分词
harmonyos·掘金·金石计划
爱桥代码的程序媛10 小时前
鸿蒙OpenHarmony【轻量系统芯片移植案例】标准系统方案之瑞芯微RK3568移植案例
嵌入式硬件·harmonyos·鸿蒙·鸿蒙系统·移植·openharmony·鸿蒙开发
AORO_BEIDOU10 小时前
防爆手机+鸿蒙系统,遨游通讯筑牢工业安全基石
5g·安全·智能手机·信息与通信·harmonyos
小强在此1 天前
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
华为·开源·团队开发·智慧农业·harmonyos·开源鸿蒙
PlumCarefree1 天前
基于鸿蒙API10的RTSP播放器(四:沉浸式播放窗口)
华为·harmonyos
中关村科金1 天前
中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速
华为·音视频·harmonyos
小强在此1 天前
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
华为·开源·团队开发·健康医疗·harmonyos·开源鸿蒙
奔跑的露西ly2 天前
【鸿蒙 HarmonyOS NEXT】popup弹窗
华为·harmonyos
OH五星上将2 天前
OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南(一)
嵌入式硬件·移动开发·harmonyos·openharmony·鸿蒙开发·鸿蒙移植