• HarmonyOS ArkUI滚动类组件-Scroll、Scroller


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

    Scroll定义介绍

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

    简单样例如下所示:

    Scroll() {
      Text('Text1')// 子组件的高度小于Scroll高度,不会触发滚动
        .fontSize(26)
        .size({width: 180, height: 40})
        .backgroundColor('#aabbcc')
    }
    .width('100%')
    .height(100)
    .backgroundColor(Color.Pink)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    Scroll属性介绍

    declare class ScrollAttribute extends CommonMethod {
      scrollable(value: ScrollDirection): T;
      scrollBar(barState: BarState): T;
      scrollBarColor(color: Color | number | string): T;
      scrollBarWidth(value: number | string): T;
      edgeEffect(edgeEffect: EdgeEffect): T;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    *   **None**:不可滚动。子组件即使超界了,也不能滚动。
    
    • 1
    • 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    Scroll事件介绍

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

    Scroller简单介绍

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

    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 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)
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    码牛课堂也为了积极培养鸿蒙生态人才,让大家都能学习到鸿蒙开发最新的技术,针对一些在职人员、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.鸿蒙南向开发方向

  • 相关阅读:
    【附源码】计算机毕业设计JAVA资源循环利用
    网络安全(自学)
    打破边界,边缘计算有何应用场景?
    ChatGPT与讯飞星火实测对比
    想要精通算法和SQL的成长之路 - 最长回文子串
    【刷题】二叉树遍历思路解析
    Go HTTP 调用(下)
    学习Golang的接口
    294_C++_报警状态bit与(&)上通道bit,然后检测置位的通道,得到对应置位通道的告警信息,适用于多通道告警,组成string字符串发送
    node.js入门—day02
  • 原文地址:https://blog.csdn.net/weixin_61845324/article/details/138083384