#鸿蒙通关秘籍#如何在鸿蒙中实现图片九宫格默认布局?

HarmonyOS
5h前
浏览
收藏 0
回答 2
待解决
回答 2
按赞同
/
按时间
第一小趴菜

通过Grid组件可以轻松实现九宫格布局。先设置​​rowsTemplate​​​和​​columnsTemplate​​​属性,各设为​​1fr 1fr 1fr​​以确保均分网格,这样每行和每列都被分为三等份。

bash Grid() { ForEach(9) { index => // 假设有9张图片 GridItem() { Image(​​image${index}.png​​) } } } .rowsTemplate('1fr 1fr 1fr') .columnsTemplate('1fr 1fr 1fr')


已于2024-12-12 13:53:28修改
分享
微博
QQ
微信
回复
3h前
樱花语FTP

在鸿蒙开发中,实现图片九宫格的默认布局可以通过Flex组件的自适应能力来完成。在默认布局情况下,首先在aboutToAppear方法中,根据图片的数量设置不同的布局参数,例如一张图片时保持图片长宽比,两到三张或五到九张图片以九宫格布局。然后,在build方法中,通过Flex组件和ForEach循环创建图片视图,应用设置好的布局参数,以实现图片的九宫格默认布局。

typescript aboutToAppear() { this.arraySize = this.imageSource.length; if (this.col <= COLUMNS_0) { this.arraySize = Math.min(this.imageSource.length, IMAGE_SET_SIZE_9); this.row = Math.ceil(this.arraySize / COLUMNS_3);

if (this.arraySize === IMAGE_SET_SIZE_1) {
  this.col = COLUMNS_1;
  this.imageAspectRatio = IMAGE_ASPECT_RATIO_0;
  this.imageFit = ImageFit.Contain;
  this.imageWidth = '60%';
} else if (this.arraySize === IMAGE_SET_SIZE_4) {
  this.col = COLUMNS_2;
  this.flexWidth = '50%';
  this.imageWidth = `calc((100% - ${this.imageSpacing}vp ) / 2)`;
} else {
  this.col = COLUMNS_3;
  this.imageWidth = `calc((100% - ${this.imageSpacing * COLUMNS_2}vp ) / 3)`;
}

} }

build() { Flex({ wrap: FlexWrap.Wrap, justifyContent: FlexAlign.Start }) { ForEach(this.imageSource.slice(0, this.arraySize), (item: string | Resource, idx: number) => { Image(item) .attributeModifier(this.modifier) .autoResize(true) .objectFit(this.imageFit) .aspectRatio(this.imageAspectRatio) .width(this.imageWidth) .margin({ bottom: (idx + 1) > ((this.row - 1) * this.col) ? 0 : this.imageSpacing, right: (idx + 1) % this.col === 0 ? 0 : this.imageSpacing }); }); }.width(this.flexWidth); }

分享
微博
QQ
微信
回复
3h前
相关问题
九宫图片都有哪些布局
876浏览 • 1回复 待解决
用什么组件可以去制作九宫图密码锁
1690浏览 • 1回复 待解决