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.鸿蒙南向开发方向

相关推荐
长弓三石1 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙
SameX3 小时前
鸿蒙 Next 电商应用安全支付与密码保护实践
前端·harmonyos
SuperHeroWu74 小时前
【HarmonyOS】键盘遮挡输入框UI布局处理
华为·harmonyos·压缩·keyboard·键盘遮挡·抬起
sanzk8 小时前
华为鸿蒙应用开发
华为·harmonyos
SoraLuna12 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos
ClkLog-开源埋点用户分析14 小时前
ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
华为·开源·开源软件·harmonyos
mg66814 小时前
鸿蒙系统的优势 开发 环境搭建 开发小示例
华为·harmonyos
lqj_本人14 小时前
鸿蒙next选择 Flutter 开发跨平台应用的原因
flutter·华为·harmonyos
lqj_本人14 小时前
使用 Flutter 绘制一个棋盘
harmonyos
lqj_本人17 小时前
Flutter&鸿蒙next 状态管理框架对比分析
flutter·华为·harmonyos