#鸿蒙通关秘籍#如何在鸿蒙中使用ArkUI的WaterFlow组件实现瀑布流布局?

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
幽谷风LDAP

要在鸿蒙中使用ArkUI的WaterFlow组件实现瀑布流布局,需按以下步骤:

  1. 创建实现IDataSource接口的WaterFlowDataSource类,用于加载数据。
  2. 使用@Builder自定义瀑布流的FlowItem子组件。
  3. 结合父组件通过WaterFlow和LazyForEach循环构造整个列表。

javascript import { WaterFlowDataSource } from './WaterFlowDataSource'

@Entry @Component struct WaterflowDemo { @State minSize: number = 50 @State maxSize: number = 100 @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[] = []

getSize() { let ret = Math.floor(Math.random() * this.maxSize) return (ret > this.minSize ? ret : this.minSize) }

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({ footer: this.itemFoot.bind(this), scroller: this.scroller }) { LazyForEach(this.datasource, (item: number) => { FlowItem() { Column() { Text("N" + item).fontSize(12).height('16') Image('res/waterFlowTest(' + item % 5 + ').jpg') .objectFit(ImageFit.Fill) } } .width(this.itemWidthArray[item]) .height(this.itemHeightArray[item]) .backgroundColor(this.colors[item % 5]) }, item => item) } .columnsTemplate("1fr 1fr 1fr 1fr") .itemConstraintSize({ minWidth: 0, maxWidth: '100%', minHeight: 0, maxHeight: '100%' }) .columnsGap(10) .rowsGap(5) .onReachStart(() => { console.info("onReachStart") }) .onReachEnd(() => { console.info("onReachEnd") }) .backgroundColor(0xFAEEE0) .width('100%') .height('80%') .layoutDirection(FlexDirection.Column) } } }

分享
微博
QQ
微信
回复
3天前
相关问题
ArkTS布局组件实现瀑布流式布局
907浏览 • 1回复 待解决