吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkTS容器組件:FlowItem

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-08 09:56 ? 次閱讀

FlowItem

[瀑布流組件]的子組件,用來(lái)展示瀑布流具體item。

說(shuō)明:
開發(fā)前請(qǐng)熟悉鴻蒙開發(fā)指導(dǎo)文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

  • 該組件從API Version 9開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。
  • 僅支持作為[Waterflow]組件的子組件使用。

子組件

支持單個(gè)子組件。

接口

FlowItem()

使用該接口來(lái)創(chuàng)建瀑布流子組件。

屬性

無(wú)

示例

WaterFlow

瀑布流容器,由“行”和“列”分割的單元格所組成,通過(guò)容器自身的排列規(guī)則,將不同大小的“項(xiàng)目”自上而下,如瀑布般緊密布局。

說(shuō)明:

該組件從API Version 9 開始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

子組件

包含[FlowItem]子組件。

說(shuō)明:

WaterFlow子組件的visibility屬性設(shè)置為None時(shí)不顯示,但該子組件周圍的gap還會(huì)生效。

接口

WaterFlow(options?: {footer?: CustomBuilder, scroller?: Scroller})

參數(shù)

參數(shù)名參數(shù)類型必填參數(shù)描述
footer[CustomBuilder]設(shè)置WaterFlow尾部組件。
scroller[Scroller]可滾動(dòng)組件的控制器,與可滾動(dòng)組件綁定。 目前瀑布流僅支持Scroller組件的scrollToIndex接口。

屬性

除支持[通用屬性]外,還支持以下屬性:

名稱參數(shù)類型描述
columnsTemplatestring設(shè)置當(dāng)前瀑布流組件布局列的數(shù)量,不設(shè)置時(shí)默認(rèn)1列。 例如, '1fr 1fr 2fr' 是將父組件分3列,將父組件允許的寬分為4等份,第一列占1份,第二列占1份,第三列占2份。并支持[auto-fill]。 默認(rèn)值:'1fr'
rowsTemplatestring設(shè)置當(dāng)前瀑布流組件布局行的數(shù)量,不設(shè)置時(shí)默認(rèn)1行。 例如, '1fr 1fr 2fr'是將父組件分三行,將父組件允許的高分為4等份,第一行占1份,第二行占一份,第三行占2份。并支持[auto-fill]。 默認(rèn)值:'1fr'
itemConstraintSize[ConstraintSizeOptions]設(shè)置約束尺寸,子組件布局時(shí),進(jìn)行尺寸范圍限制。
columnsGapLength設(shè)置列與列的間距。 默認(rèn)值:0
rowsGapLength設(shè)置行與行的間距。 默認(rèn)值:0
layoutDirection[FlexDirection]設(shè)置布局的主軸方向。 默認(rèn)值:FlexDirection.Column
enableScrollInteraction10+boolean設(shè)置是否支持滾動(dòng)手勢(shì),當(dāng)設(shè)置為false時(shí),無(wú)法通過(guò)手指或者鼠標(biāo)滾動(dòng),但不影響控制器的滾動(dòng)接口。 默認(rèn)值:true
nestedScroll10+[NestedScrollOptions]嵌套滾動(dòng)選項(xiàng)。設(shè)置向前向后兩個(gè)方向上的嵌套滾動(dòng)模式,實(shí)現(xiàn)與父組件的滾動(dòng)聯(lián)動(dòng)。
friction10+number[Resource]

layoutDirection優(yōu)先級(jí)高于rowsTemplate和columnsTemplate。根據(jù)layoutDirection設(shè)置情況,分為以下三種設(shè)置模式:

  • layoutDirection設(shè)置縱向布局(FlexDirection.Column 或 FlexDirection.ColumnReverse)
    此時(shí)columnsTemplate有效(如果未設(shè)置,取默認(rèn)值)。例如columnsTemplate設(shè)置為"1fr 1fr"、rowsTemplate設(shè)置為"1fr 1fr 1fr"時(shí),瀑布流組件縱向布局,輔軸均分成橫向2列。
  • layoutDirection設(shè)置橫向布局(FlexDirection.Row 或 FlexDirection.RowReverse)
    此時(shí)rowsTemplate有效(如果未設(shè)置,取默認(rèn)值)。例如columnsTemplate設(shè)置為"1fr 1fr"、rowsTemplate設(shè)置為"1fr 1fr 1fr"時(shí),瀑布流組件橫向布局,輔軸均分成縱向3列。
  • layoutDirection未設(shè)置布局方向
    布局方向?yàn)閘ayoutDirection的默認(rèn)值:FlexDirection.Column,此時(shí)columnsTemplate有效。例如columnsTemplate設(shè)置為"1fr 1fr"、rowsTemplate設(shè)置為"1fr 1fr 1fr"時(shí),瀑布流組件縱向布局,輔軸均分成橫向2列。

事件

除支持[通用事件]外,還支持以下事件:

名稱功能描述
onReachStart(event: () => void)瀑布流組件到達(dá)起始位置時(shí)觸發(fā)。
onReachEnd(event: () => void)瀑布流組件到底末尾位置時(shí)觸發(fā)。
onScrollFrameBegin10+(event: (offset: number, state: ScrollState) => { offsetRemain })瀑布流開始滑動(dòng)時(shí)觸發(fā),事件參數(shù)傳入即將發(fā)生的滑動(dòng)量,事件處理函數(shù)中可根據(jù)應(yīng)用場(chǎng)景計(jì)算實(shí)際需要的滑動(dòng)量并作為事件處理函數(shù)的返回值返回,瀑布流將按照返回值的實(shí)際滑動(dòng)量進(jìn)行滑動(dòng)。 - offset:即將發(fā)生的滑動(dòng)量,單位vp。 - state:當(dāng)前滑動(dòng)狀態(tài)。 - offsetRemain:實(shí)際滑動(dòng)量,單位vp。 觸發(fā)該事件的條件:手指拖動(dòng)WaterFlow、WaterFlow慣性劃動(dòng)時(shí)每幀開始時(shí)觸發(fā);List超出邊緣回彈、使用滾動(dòng)控制器的滾動(dòng)不會(huì)觸發(fā)。HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

QQ截圖20240705211052.png

auto-fill說(shuō)明

WaterFlow的columnsTemplate、rowsTemplate屬性的auto-fill僅支持以下格式:

repeat(auto-fill, track-size)

其中repeat、auto-fill為關(guān)鍵字。track-size為行高或者列寬,支持的單位包括px、vp、%或有效數(shù)字,track-size至少包括一個(gè)有效行高或者列寬。

示例

// WaterFlowDataSource.ets

// 實(shí)現(xiàn)IDataSource接口的對(duì)象,用于瀑布流組件加載數(shù)據(jù)
export class WaterFlowDataSource implements IDataSource {
  private dataArray: number[] = []
  private listeners: DataChangeListener[] = []

  constructor() {
    for (let i = 0; i < 100; i++) {
      this.dataArray.push(i)
    }
  }

  // 獲取索引對(duì)應(yīng)的數(shù)據(jù)
  public getData(index: number): number {
    return this.dataArray[index]
  }

  // 通知控制器數(shù)據(jù)重新加載
  notifyDataReload(): void {
    this.listeners.forEach(listener = > {
      listener.onDataReloaded()
    })
  }

  // 通知控制器數(shù)據(jù)增加
  notifyDataAdd(index: number): void {
    this.listeners.forEach(listener = > {
      listener.onDataAdd(index)
    })
  }

  // 通知控制器數(shù)據(jù)變化
  notifyDataChange(index: number): void {
    this.listeners.forEach(listener = > {
      listener.onDataChange(index)
    })
  }

  // 通知控制器數(shù)據(jù)刪除
  notifyDataDelete(index: number): void {
    this.listeners.forEach(listener = > {
      listener.onDataDelete(index)
    })
  }

  // 通知控制器數(shù)據(jù)位置變化
  notifyDataMove(from: number, to: number): void {
    this.listeners.forEach(listener = > {
      listener.onDataMove(from, to)
    })
  }

  // 獲取數(shù)據(jù)總數(shù)
  public totalCount(): number {
    return this.dataArray.length
  }

  // 注冊(cè)改變數(shù)據(jù)的控制器
  registerDataChangeListener(listener: DataChangeListener): void {
    if (this.listeners.indexOf(listener) < 0) {
      this.listeners.push(listener)
    }
  }

  // 注銷改變數(shù)據(jù)的控制器
  unregisterDataChangeListener(listener: DataChangeListener): void {
    const pos = this.listeners.indexOf(listener)
    if (pos >= 0) {
      this.listeners.splice(pos, 1)
    }
  }

  // 增加數(shù)據(jù)
  public Add1stItem(): void {
    this.dataArray.splice(0, 0, this.dataArray.length)
    this.notifyDataAdd(0)
  }

  // 在數(shù)據(jù)尾部增加一個(gè)元素
  public AddLastItem(): void {
    this.dataArray.splice(this.dataArray.length, 0, this.dataArray.length)
    this.notifyDataAdd(this.dataArray.length - 1)
  }

  // 在指定索引位置增加一個(gè)元素
  public AddItem(index: number): void {
    this.dataArray.splice(index, 0, this.dataArray.length)
    this.notifyDataAdd(index)
  }

  // 刪除第一個(gè)元素
  public Delete1stItem(): void {
    this.dataArray.splice(0, 1)
    this.notifyDataDelete(0)
  }

  // 刪除第二個(gè)元素
  public Delete2ndItem(): void {
    this.dataArray.splice(1, 1)
    this.notifyDataDelete(1)
  }

  // 刪除最后一個(gè)元素
  public DeleteLastItem(): void {
    this.dataArray.splice(-1, 1)
    this.notifyDataDelete(this.dataArray.length)
  }

  // 重新加載數(shù)據(jù)
  public Reload(): void {
    this.dataArray.splice(1, 1)
    this.dataArray.splice(3, 2)
    this.notifyDataReload()
  }
}
// Index.ets
import { WaterFlowDataSource } from './WaterFlowDataSource'

@Entry
@Component
struct WaterflowDemo {
  @State minSize: number = 80
  @State maxSize: number = 180
  @State fontSize: number = 24
  @State colors: number[] = [0xFFC0CB, 0xDA70D6, 0x6B8E23, 0x6A5ACD, 0x00FFFF, 0x00FF7F]
  scroller: Scroller = new Scroller()
  datasource: WaterFlowDataSource = new WaterFlowDataSource()
  private itemWidthArray: number[] = []
  private itemHeightArray: number[] = []

  // 計(jì)算flow item寬/高
  getSize() {
    let ret = Math.floor(Math.random() * this.maxSize)
    return (ret > this.minSize ? ret : this.minSize)
  }

  // 保存flow item寬/高
  getItemSizeArray() {
    for (let i = 0; i < 100; i++) {
      this.itemWidthArray.push(this.getSize())
      this.itemHeightArray.push(this.getSize())
    }
  }

  aboutToAppear() {
    this.getItemSizeArray()
  }

  @Builder
  itemFoot() {
    Column() {
      Text(`Footer`)
        .fontSize(10)
        .backgroundColor(Color.Red)
        .width(50)
        .height(50)
        .align(Alignment.Center)
        .margin({ top: 2 })
    }
  }

  build() {
    Column({ space: 2 }) {
      WaterFlow() {
        LazyForEach(this.datasource, (item: number) = > {
          FlowItem() {
            Column() {
              Text("N" + item).fontSize(12).height('16')
              Image('res/waterFlowTest(' + item % 5 + ').jpg')
                .objectFit(ImageFit.Fill)
                .width('100%')
                .layoutWeight(1)
            }
          }
          .onAppear(() = > {
            // 即將觸底時(shí)提前增加數(shù)據(jù)
            if (item + 20 == this.datasource.totalCount()) {
              for (let i = 0; i < 100; i++) {
                this.datasource.AddLastItem()
              }
            }
          })
          .width('100%')
          .height(this.itemHeightArray[item % 100])
          .backgroundColor(this.colors[item % 5])
        }, (item: string) = > item)
      }
      .columnsTemplate("1fr 1fr")
      .columnsGap(10)
      .rowsGap(5)
      .backgroundColor(0xFAEEE0)
      .width('100%')
      .height('100%')
    }
  }
}

zh-cn_image_WaterFlow.gif

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 組件
    +關(guān)注

    關(guān)注

    1

    文章

    518

    瀏覽量

    17925
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2392

    瀏覽量

    43055
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    鴻蒙ArkTS容器組件:Column

    沿垂直方向布局的容器
    的頭像 發(fā)表于 07-05 16:32 ?509次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Column

    鴻蒙ArkTS容器組件:Flex

    以彈性方式布局子組件容器組件
    的頭像 發(fā)表于 07-08 10:19 ?583次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Flex

    鴻蒙ArkTS容器組件:GridCol

    柵格子組件,必須作為柵格容器組件([GridRow])的子組件使用。
    的頭像 發(fā)表于 07-08 15:17 ?490次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:GridCol

    鴻蒙ArkTS容器組件:GridItem

    網(wǎng)格容器中單項(xiàng)內(nèi)容容器
    的頭像 發(fā)表于 07-09 09:25 ?477次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:GridItem

    鴻蒙ArkTS容器組件:ListItem

    可以包含單個(gè)子組件
    的頭像 發(fā)表于 07-10 15:41 ?723次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:ListItem

    鴻蒙ArkTS容器組件:ListItemGroup

    組件用來(lái)展示列表item分組,寬度默認(rèn)充滿[List]組件,必須配合List組件來(lái)使用。
    的頭像 發(fā)表于 07-10 09:20 ?780次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:ListItemGroup

    鴻蒙ArkTS容器組件:Navigator

    路由容器組件,提供路由跳轉(zhuǎn)能力。
    的頭像 發(fā)表于 07-10 14:55 ?481次閱讀

    鴻蒙ArkTS容器組件:Refresh

    可以進(jìn)行頁(yè)面下拉操作并顯示刷新動(dòng)效的容器組件
    的頭像 發(fā)表于 07-11 16:11 ?591次閱讀

    鴻蒙ArkTS容器組件:RowSplit

    將子組件橫向布局,并在每個(gè)子組件之間插入一根縱向的分割線。
    的頭像 發(fā)表于 07-11 22:25 ?400次閱讀

    鴻蒙ArkTS容器組件:Scroll

    可滾動(dòng)的容器組件,當(dāng)子組件的布局尺寸超過(guò)父組件的尺寸時(shí),內(nèi)容可以滾動(dòng)。
    的頭像 發(fā)表于 07-12 15:24 ?1346次閱讀

    鴻蒙ArkTS容器組件:SideBarContainer

    提供側(cè)邊欄可以顯示和隱藏的側(cè)邊欄容器,通過(guò)子組件定義側(cè)邊欄和內(nèi)容區(qū),第一個(gè)子組件表示側(cè)邊欄,第二個(gè)子組件表示內(nèi)容區(qū)。
    的頭像 發(fā)表于 07-18 15:46 ?630次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:SideBarContainer

    鴻蒙ArkTS容器組件:Stack

    堆疊容器,子組件按照順序依次入棧,后一個(gè)子組件覆蓋前一個(gè)子組件
    的頭像 發(fā)表于 07-15 18:23 ?947次閱讀

    鴻蒙ArkTS容器組件:Swiper

    滑塊視圖容器,提供子組件滑動(dòng)輪播顯示的能力。
    的頭像 發(fā)表于 07-15 09:51 ?755次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Swiper

    鴻蒙ArkTS容器組件:Tabs

    通過(guò)頁(yè)簽進(jìn)行內(nèi)容視圖切換的容器組件,每個(gè)頁(yè)簽對(duì)應(yīng)一個(gè)內(nèi)容視圖。
    的頭像 發(fā)表于 07-15 09:48 ?930次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:Tabs

    鴻蒙ArkTS容器組件:WaterFlow

    瀑布流容器,由“行”和“列”分割的單元格所組成,通過(guò)容器自身的排列規(guī)則,將不同大小的“項(xiàng)目”自上而下,如瀑布般緊密布局。
    的頭像 發(fā)表于 07-15 17:35 ?498次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>ArkTS</b><b class='flag-5'>容器</b><b class='flag-5'>組件</b>:WaterFlow
    百家乐正品| 百家乐官网中B是什么| 澳门百家乐注册| 杨筠松古法风水24| 百家乐官网真人娱乐城陈小春| 足球赌博网站| bet365体育投注心得| 下载百家乐的玩法技巧和规则| 百家乐路单之我见| 利博百家乐官网破解| 澳门娱乐城官网| 棋牌游戏大厅下载| 富贵乐园棋牌游戏| 德州扑克辅助软件| 大发888送彩金| 大发888 3403| 大发888真钱游戏娱乐城下载| 战神百家乐娱乐城| sz新全讯网新112| 大发888信誉| 大发888手机版下载安装| 百家乐官网五湖四海赌场娱乐网规则 | 尉氏县| 岳阳市| 网上玩百家乐官网犯法| 百家乐官网破解辅助| 百家乐官网游戏研发| 太谷县| 百家乐娱乐平台网77scs| 百家乐官网固定打法| 百家乐官网玩法的技巧| 百家乐官网的打法技巧| 金博士百家乐官网娱乐城| 月亮城百家乐官网的玩法技巧和规则 | 百家乐视频象棋| 百家乐龙虎规则| 百家乐赌场走势图| 八大胜百家乐的玩法技巧和规则| 百家乐路单下| 凯斯线上娱乐| 百家乐官网策略|