HarmonyOS鸿蒙Next中如何实现类似朋友圈的相册展示功能

HarmonyOS鸿蒙Next中如何实现类似朋友圈的相册展示功能 最近在开发中ArkUI时遇到了问题,如何实现类似朋友圈里面的相册展示功能

具体功能如下:

假定展示图片的为一个块容器,宽度为屏幕的宽度,但是高度是自适应的

1、如果1张图,那展示为长宽各站容器的2/3的正方形图片

2、如果是4张图,则每张图按照容器一半的正方形展示

3、其他情况下,每张图按照容器1/3的正方形展示

具体的示例看附件

解决方法

1、我能想的是通过display方法获取屏幕的宽度,然后动态计算每张图的宽度,然后去排列

2、我试过grid容器,但是grid容器没法做到每张图按照正方形展示

不知道有没有更好的办法或者第三方库实现,望坛友帮助


更多关于HarmonyOS鸿蒙Next中如何实现类似朋友圈的相册展示功能的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

用栅格布局组件试试吧
当子组件个数为1,2,3,4,5,6,7,8,9时
分别设置GridCol的span属性为8,6,4 6,4,4,4,4

Grid的话更适合固定行列数的布局,还得自己计算高度有点麻烦,

更多关于HarmonyOS鸿蒙Next中如何实现类似朋友圈的相册展示功能的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


了解,用你说的办法基本实现了,谢谢,

已解决。

使用栅格方式实现,解决了高度提前设定的问题

图片高度宽度可以使用aspectRatio(1)这是高度宽度一致,就能显示为正方形了

@Component @Preview export struct PostImage {

images:Resource[] = getImages(1) images4:Resource[] = getImages(4) images7:Resource[] = getImages(7) images9:Resource[] = getImages(9)

build(){ Row(){ Column({space: 10}){

    Image($r('app.media.user_head_2')).width('80%').height(250).objectFit(ImageFit.Auto)

    Grid(){
      ForEach(this.images4, (item:Resource, index)=>{
        GridItem(){
          Image(item)
        }.backgroundColor(Color.Pink)
      })
    }.columnsTemplate(getColumnTemplate(this.images4.length))
    .rowsTemplate("1fr 1fr")
    .rowsGap(10)
    .columnsGap(10)
    .width('80%').height(250)
    .backgroundColor(Color.Yellow)


    Grid(){
      ForEach(this.images9, (item:Resource, index)=>{
        GridItem(){
          Image(item)
        }.backgroundColor(Color.Pink)
      }, (item, index) => '9-' + index)
    }.columnsTemplate(getColumnTemplate(this.images9.length))
    .backgroundColor(Color.Green)
    .rowsGap(10)
    .columnsGap(10)
    .width('80%').height(250)


  }.width('100%').height('100%')


}.width('100%').height('100%').backgroundColor(Color.Pink)

} }

function getColumnTemplate(size:number):string{ if(1 == size){ return “1fr”; }else if(4 == size){ return “1fr 1fr” }else{ return “1fr 1fr 1fr” } }

function getImages(size:number):Resource[]{ let res:Resource[] = [] for(let i=0; i<size; i++){ res.push($r(‘app.media.user_head_1’)) } return res; }

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

用grid要提前设置高度,这点不如楼下说的栅格更方便一点,不过还是谢谢你哦,

这种吗

开发语言是ArkTS,谢谢大家

在HarmonyOS鸿蒙Next中实现类似朋友圈的相册展示功能,可以使用ListContainer组件来展示图片列表,并结合Image组件加载图片。首先,通过ListContainerItemProvider来管理图片数据源,每个Item可以包含一个Image组件用于显示图片。可以通过PixelMap来加载本地或网络图片,并将其设置到Image组件中。

为了实现图片的网格布局,可以使用GridLayoutManager来设置ListContainer的布局管理器,并指定每行显示的图片数量。此外,可以通过PageSlider组件实现图片的滑动浏览功能,用户点击某张图片后,可以跳转到详情页展示大图。

对于图片的加载和缓存,可以使用ImageCache来优化性能,避免重复加载和内存占用过高。通过ImageSourceImagePacker可以处理图片的压缩和格式转换,确保图片在不同设备上显示效果一致。

最后,可以通过AbilityPage来管理相册展示的页面逻辑,使用Intent实现页面跳转和数据传递。通过这些组件的组合,可以在HarmonyOS鸿蒙Next中实现类似朋友圈的相册展示功能。

在HarmonyOS鸿蒙Next中实现类似朋友圈的相册展示功能,可以通过以下步骤:

  1. UI布局:使用ListContainerGridLayout来展示图片,支持滑动和分页加载。
  2. 图片加载:利用Image组件加载图片,结合ImageCache进行缓存管理,提升加载效率。
  3. 数据管理:通过DataAbilityDatabase管理图片数据,支持增删改查操作。
  4. 交互功能:为每张图片添加点击事件,支持查看大图、点赞、评论等交互。
  5. 网络请求:使用HttpURLConnectionOkHttp进行网络请求,获取图片数据。
  6. 权限管理:确保应用有访问相册和网络的权限,使用Permission模块进行权限申请和管理。

通过这些步骤,可以在HarmonyOS中实现一个功能完善的相册展示功能。

回到顶部